Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Phân tích hiệu suất I / O cho SQL Server

Một trong những điểm nghẽn hiệu suất phổ biến nhất mà tôi thấy với tư cách là nhà tư vấn là hiệu suất hệ thống con lưu trữ không đầy đủ. Có một số lý do dẫn đến hiệu suất lưu trữ kém, nhưng đo lường nó và hiểu những gì cần được đo lường và giám sát luôn là một bài tập hữu ích.

Trên thực tế, có ba số liệu chính quan trọng nhất khi nói đến việc đo lường hiệu suất của hệ thống con I / O:

Độ trễ

Chỉ số đầu tiên là độ trễ, chỉ đơn giản là thời gian cần một I / O để hoàn thành. Đây thường được gọi là thời gian phản hồi hoặc thời gian phục vụ. Phép đo bắt đầu khi hệ điều hành gửi yêu cầu đến ổ đĩa (hoặc bộ điều khiển đĩa) và kết thúc khi ổ đĩa xử lý xong yêu cầu. Quá trình đọc hoàn tất khi hệ điều hành nhận được dữ liệu, trong khi quá trình ghi hoàn tất khi ổ đĩa thông báo cho hệ điều hành rằng nó đã nhận được dữ liệu.

Để ghi, dữ liệu có thể vẫn nằm trong bộ đệm DRAM trên ổ đĩa hoặc bộ điều khiển đĩa, tùy thuộc vào chính sách bộ nhớ đệm và phần cứng của bạn. Bộ nhớ đệm ghi ngược nhanh hơn nhiều so với bộ nhớ đệm ghi qua, nhưng nó yêu cầu pin dự phòng cho bộ điều khiển đĩa. Đối với việc sử dụng SQL Server, bạn muốn đảm bảo rằng mình đang sử dụng bộ nhớ đệm ghi ngược thay vì bộ nhớ đệm ghi qua nếu có thể. Bạn cũng muốn đảm bảo rằng bộ đệm ẩn đĩa cứng của bạn thực sự được bật, vì một số công cụ quản lý đĩa của nhà cung cấp sẽ tắt nó theo mặc định.

Hoạt động đầu vào / đầu ra mỗi giây (IOPS)

Số liệu thứ hai là Hoạt động đầu vào / đầu ra mỗi giây (IOPS). Số liệu này liên quan trực tiếp đến độ trễ. Ví dụ:độ trễ không đổi là 1ms có nghĩa là một ổ đĩa có thể xử lý 1.000 IO mỗi giây với độ sâu hàng đợi là 1. Khi nhiều IO được thêm vào hàng đợi, độ trễ sẽ tăng lên. Một trong những ưu điểm chính của lưu trữ flash là nó có thể đọc / ghi song song nhiều kênh NAND, cùng với thực tế là không có bộ phận chuyển động cơ điện để làm chậm quá trình truy cập đĩa. IOPS thực sự bằng độ sâu hàng đợi chia cho độ trễ và bản thân IOPS không xem xét kích thước truyền cho một lần chuyển đĩa riêng lẻ. Bạn có thể dịch IOPS thành MB / giây và MB / giây thành độ trễ miễn là bạn biết độ sâu hàng đợi và kích thước truyền.

Thông lượng tuần tự

Thông lượng tuần tự là tốc độ mà bạn có thể truyền dữ liệu, thường được đo bằng megabyte mỗi giây (MB / giây) hoặc gigabyte mỗi giây (GB / giây). Chỉ số thông lượng tuần tự của bạn tính bằng MB / giây bằng IOPS nhân với kích thước truyền. Ví dụ:556 MB / giây bằng 135.759 IOPS nhân với kích thước truyền 4096 byte, trong khi 135.759 IOPS nhân với kích thước truyền 8192 byte sẽ là thông lượng tuần tự 1112 MB / giây. Mặc dù tầm quan trọng hàng ngày của nó đối với SQL Server, thông lượng đĩa tuần tự thường bị thay đổi ngắn trong lưu trữ doanh nghiệp, cả bởi nhà cung cấp lưu trữ và quản trị viên lưu trữ. Thực tế cũng khá phổ biến khi thấy các đĩa từ thực tế trong hộp lưu trữ được gắn trực tiếp (DAS) hoặc thiết bị mạng khu vực lưu trữ (SAN) bận đến mức chúng không thể cung cấp thông lượng tuần tự được đánh giá đầy đủ.

Thông lượng tuần tự rất quan trọng đối với nhiều hoạt động phổ biến của máy chủ cơ sở dữ liệu, bao gồm sao lưu và khôi phục toàn bộ cơ sở dữ liệu, tạo chỉ mục và xây dựng lại cũng như quét đọc tuần tự kiểu kho dữ liệu lớn (khi dữ liệu của bạn không vừa với vùng đệm SQL Server). Một mục tiêu hiệu suất mà tôi muốn nhắm tới trên các bản dựng máy chủ cơ sở dữ liệu mới là có ít nhất 1GB / giây thông lượng tuần tự cho mỗi ký tự ổ đĩa hoặc điểm gắn kết. Có mức hiệu suất này (hoặc tốt hơn) giúp cuộc sống của bạn trở nên dễ dàng hơn rất nhiều với tư cách là một chuyên gia cơ sở dữ liệu. Nó làm cho rất nhiều công việc cơ sở dữ liệu phổ biến của bạn nhanh hơn rất nhiều và nó cũng cho phép bạn tự do điều chỉnh chỉ mục thường xuyên hơn khi bạn có thể tạo chỉ mục trên một bảng lớn trong vài giây hoặc vài phút thay vì hàng giờ.

Số liệu khối lượng công việc I / O của SQL Server

Khi nói đến SQL Server và hiệu suất I / O, có một số điều bạn nên đo lường và theo dõi theo thời gian. Bạn nên biết tỷ lệ đọc so với ghi cho khối lượng công việc của bạn cho tất cả các tệp cơ sở dữ liệu người dùng của bạn và cho tempdb. Các tỷ lệ sẽ khác nhau đối với các loại tệp SQL Server và khối lượng công việc khác nhau. Bạn có thể sử dụng Truy vấn chẩn đoán DMV của tôi để xác định điều này và bạn cũng có thể sử dụng Chế độ xem hoạt động đĩa trong SQL Sentry Performance Advisor để dễ dàng có được cái nhìn đầy đủ hơn về hoạt động đĩa của bạn, từ một bức tranh tổng thể ở mức cao vào các tệp riêng lẻ:

SQL Sentry Performance Advisor:Disk Activity

Bạn cũng nên đo tỷ lệ I / O điển hình cho IOPS và thông lượng tuần tự. Trong Windows Performance Monitor (PerfMon), đọc / giây và ghi / giây hiển thị IOPS, trong khi byte đọc đĩa / giây và byte ghi đĩa biểu thị thông lượng tuần tự. Bạn nên sử dụng PerfMon để đo giây / lần đọc trung bình của đĩa và giây / ghi trên đĩa trung bình, là độ trễ đọc và ghi ở cấp độ đĩa. Cuối cùng, bạn có thể sử dụng Truy vấn chẩn đoán DMV của tôi để đo độ trễ đọc và ghi cấp độ tệp trung bình cho tất cả các tệp cơ sở dữ liệu người dùng của bạn cũng như cho tempdb.

Phương pháp đo hiệu suất I / O

Bạn có thể sử dụng phần Đĩa trong Trình theo dõi tài nguyên Windows để xem nhanh, theo thời gian thực về một số chỉ số đĩa chính cho tất cả các tệp cơ sở dữ liệu SQL Server của bạn. Đi sâu hơn, bạn có thể sử dụng PerfMon để đo lường và theo dõi các bộ đếm hiệu suất quan trọng mà tôi đã đề cập trước đây. Trước khi bắt đầu sản xuất với một máy chủ cơ sở dữ liệu mới, bạn nên thực hiện một số kiểm tra điểm chuẩn đĩa để xác định loại hiệu suất mà hệ thống con I / O của bạn thực sự có thể mang lại. Điều này thực sự không khó hoặc tốn thời gian (nếu bạn sử dụng đúng công cụ), nhưng nó thường bị lãng quên khi một máy chủ cơ sở dữ liệu mới được cung cấp và thử nghiệm.

Điểm chuẩn đĩa đầu tiên mà bạn luôn nên chạy là CrystalDiskMark 4.0, gần đây đã được viết lại để sử dụng chương trình điểm chuẩn đĩa Microsoft DiskSpd tương đối mới. Giao diện người dùng CDM 4.0 cho phép bạn chọn nhiều kích thước tệp thử nghiệm hơn và nó cũng cho phép bạn chọn độ sâu hàng đợi và số luồng cho các lần chạy thử nghiệm. Điều này cho phép bạn có được khối lượng công việc I / O giống máy chủ hơn và nó cũng cho phép bạn nhấn mạnh hơn các thiết bị lưu trữ flash NVMe mới hơn có thể xử lý độ sâu hàng đợi cao hơn 32.

CrystalDiskMark 4.03 Kết quả với QD =32 và chủ đề =1

Hình 2:CrystalDiskMark 4.03 Kết quả với QD =32 và thread =4

Không giống như các phiên bản trước của CDM, hai hàng phù hợp nhất cho việc sử dụng SQL Server nằm ở giữa màn hình hiển thị kết quả. Chúng là các lần đọc và ghi ngẫu nhiên 4K với độ sâu hàng đợi cao (32 theo mặc định) và các lần đọc và ghi tuần tự. Sau khi thực hiện một số bài kiểm tra điểm chuẩn lưu trữ với CrystalDiskMark 4.0, bạn nên thực hiện một số bài kiểm tra toàn diện hơn với Microsoft DiskSpd. Trong một bài viết tới, tôi sẽ trình bày cách sử dụng DiskSpd để thực hiện kiểm tra hoàn chỉnh hơn cho SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa CTE và SubQuery?

  2. SQL Server:thả bảng xếp tầng tương đương?

  3. Cách khắc phục “Lược đồ phân vùng‘… ’không có bất kỳ nhóm tệp nào được sử dụng tiếp theo” trong SQL Server

  4. Làm cách nào để lấy Thời gian từ định dạng DateTime trong SQL?

  5. Không thể mở kiểm tra cơ sở dữ liệu được yêu cầu bởi đăng nhập. Đăng nhập không thành công. Đăng nhập không thành công cho người dùng 'xyz \ ASPNET'