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

Nói về tắc nghẽn hiệu suất máy chủ SQL

Nếu người dùng cơ sở dữ liệu của bạn phàn nàn rằng gần đây hiệu suất SQL Server kém, có thể bạn đang gặp phải ảnh hưởng của một hoặc nhiều nút thắt cổ chai của SQL Server. Những tắc nghẽn này xảy ra vì nhiều lý do, nhưng chúng thường xuyên xảy ra do sự cố với bộ nhớ, I / O hoặc CPU.

Mặc dù không phải lúc nào cũng dễ dàng xác định xem sự cố hiệu suất xuất phát từ nút cổ chai SQL Server hay từ một nguồn khác, bạn có thể tìm kiếm các triệu chứng phổ biến của nút cổ chai này để giúp thu hẹp tìm kiếm của bạn cho nguồn gốc của sự cố.

Các hiện tượng phổ biến của tắc nghẽn máy chủ SQL

  • Máy chủ SQL hỗ trợ bộ xử lý
  • Thời gian thực thi các truy vấn lâu hơn
  • I / O quá mức
  • Nhật ký ứng dụng hiển thị thông báo hết bộ nhớ
  • Hoạt động mạnh trên đĩa
  • Thời gian chờ lâu trên mỗi I / O

Sự xuất hiện đột ngột của một hoặc nhiều trong số các hiện tượng này là một dấu hiệu tốt cho thấy bạn có một nút cổ chai SQL Server ở đâu đó trong hệ thống của mình. Bây giờ, công việc của bạn là tìm ra nó.

Các loại tắc nghẽn máy chủ SQL

Có ba loại tắc nghẽn chính của SQL Server:bộ nhớ, I / O và CPU. Điều quan trọng đối với các DBA là phải nắm rõ nguyên nhân, triệu chứng và cách khắc phục của từng nguyên nhân để họ có thể xác định và loại bỏ các nút thắt một cách nhanh chóng và giảm thiểu tác động của hiệu suất kém. Chúng tôi cũng đã đưa vào một số bộ đếm hiệu suất tốt nhất để theo dõi sẽ giúp xác định các điểm nghẽn hiệu suất ngay lập tức.

Nút thắt cổ chai của bộ nhớ

Tắc nghẽn bộ nhớ thường là do không đủ tài nguyên bộ nhớ hoặc các hoạt động của SQL Server ngốn hết bộ nhớ khả dụng. Các triệu chứng cần chú ý bao gồm thời gian thực thi truy vấn lâu hơn, I / O quá mức, thông báo hết bộ nhớ trong nhật ký ứng dụng và sự cố hệ thống thường xuyên.

Các cách tốt nhất để tránh tắc nghẽn liên quan đến bộ nhớ là sử dụng trình tối ưu hóa truy vấn để loại bỏ các truy vấn không cần thiết hoặc lỗi thời và định cấu hình tuổi thọ trang kết hợp với tỷ lệ truy cập bộ nhớ đệm để hạn chế các lần truy cập vào đĩa. Nếu đã quá muộn để tránh tắc nghẽn, hãy thử xem lại và điều chỉnh các truy vấn, định cấu hình lại bộ nhớ hoặc thêm bộ nhớ thực.

Bộ đếm cần theo dõi:bộ nhớ khả dụng, tổng bộ nhớ máy chủ, bộ nhớ máy chủ đích, số trang / giây, tỷ lệ truy cập bộ đệm cache

Nút cổ chai I / O

Khi không có đủ bộ nhớ để hỗ trợ các hoạt động cơ sở dữ liệu thông thường như TempDB, tắc nghẽn I / O có thể xảy ra. Thời gian phản hồi lâu, ứng dụng chạy chậm và hết thời gian thực hiện tác vụ thường xuyên là tất cả các chỉ số chính cho thấy bạn có nút thắt cổ chai I / O.

Bạn có thể tránh loại nút cổ chai này bằng cách thiết lập giám sát với cảnh báo và cảnh báo ngưỡng để xác định hoạt động nào sử dụng quá nhiều dung lượng lưu trữ. Nếu xảy ra tắc nghẽn I / O, hãy hạn chế việc đọc và ghi các trang cơ sở dữ liệu đến và từ đĩa. Điều này sẽ yêu cầu bạn kiểm tra và sửa lỗi quét chỉ mục thường xuyên, truy vấn không hiệu quả và thống kê lỗi thời.

Bộ đếm để theo dõi:độ dài hàng đợi đĩa trung bình, giây đĩa / lần đọc trung bình, giây / ghi đĩa trung bình,% thời gian đĩa, số lần đọc / giây đĩa trung bình, ghi / giây đĩa trung bình

Sự tắc nghẽn của CPU

Nguyên nhân hàng đầu gây ra tắc nghẽn CPU là không đủ tài nguyên phần cứng. Khá dễ dàng để xác định nút cổ chai này bằng cách kiểm tra nhật ký của bạn để xác định xem SQL Server có đang sử dụng quá nhiều CPU hay không.

Trong một thế giới lý tưởng, bạn có thể tránh tắc nghẽn CPU bằng cách có một máy chủ chuyên dụng chỉ dành cho SQL Server và chạy tất cả các phần mềm khác trên một máy khác. Bởi vì đó không phải là một tùy chọn cho hầu hết các DBA, bạn sẽ cần biết cách mở rộng CPU của mình.

Bước đầu tiên là xác định các ổ cắm của CPU. Khi bạn biết vấn đề nằm ở đâu, bạn có thể điều chỉnh các truy vấn, cải thiện kế hoạch thực thi của mình hoặc cấu hình lại hệ thống.

Bộ đếm để giám sát:% thời gian xử lý, yêu cầu hàng loạt / giây, biên dịch SQL / giây, biên dịch lại SQL / giây

Câu chuyện về tắc nghẽn hiệu suất máy chủ SQL

“Chúng tôi có một số nút thắt về hiệu suất của SQL Server cần giải quyết”, sếp của tôi cho biết vào cuối ngày thứ Sáu.

"Làm sao bạn biết?" Tôi hỏi.

“Doanh số đang phàn nàn rằng cơ sở dữ liệu của họ gần đây đã chậm lại. Chúng tôi cần xem điều gì đang xảy ra với nó. ”

"ĐƯỢC RỒI. Tôi sẽ đặt một phòng họp để chúng ta có thể ngồi xuống và làm việc về điều đó. ”

“Đừng bận tâm,” ông chủ nói. “Đó là muộn vào một buổi chiều thứ Sáu. Điều đó có nghĩa là cách tốt nhất để nghiên cứu các điểm nghẽn là với một vài điều của chúng ta. Chúng ta sẽ đến chợ Pike Pub. ”

Chúng tôi bước vào quán bar nằm khuất trong Chợ Pike Place và tìm thấy một chiếc bàn nhỏ bên cửa sổ.

“Loại nút thắt cổ chai yêu thích của bạn là gì?” ông chủ hỏi.

Tôi đã nói rằng tôi là một phần của một Nellie nghịch ngợm trong nút cổ chai 22 ounce.

“Lựa chọn tốt,” ông chủ nói. “Bạn gọi món đó, và tôi sẽ có Citrus Summer Ale.”

Trong khi chờ đợi các nút thắt cổ chai đến, chúng tôi bắt đầu công việc kinh doanh trên các nút thắt cổ chai về hiệu suất của Máy chủ SQL.

“Chúng tôi sẽ cần kiểm tra các vấn đề ở một số nơi,” ông chủ nói. “Chúng có thể là vấn đề với bộ nhớ, bộ lưu trữ hoặc bộ xử lý, nhưng tất cả chúng đều giống nhau đối với người dùng, phải không? Hiệu suất trống rỗng.

“Các vấn đề về CPU không khó tìm. Nếu đó là sự cố, thì chúng ta sẽ thấy rằng Máy chủ SQL đang làm hỏng bộ xử lý và khiến nó luôn tăng đột biến.

“Nếu đó là vấn đề về bộ nhớ, chúng ta sẽ thấy những thứ như thời gian thực thi lâu hơn trên các truy vấn và nhiều I / O hơn vì ứng dụng phải tiếp tục chạy ra đĩa. Chúng tôi cũng có thể kiểm tra nhật ký ứng dụng để tìm thông báo hết bộ nhớ.

“Và nếu nút cổ chai đang được lưu trữ, chúng tôi sẽ thấy hoạt động cực đoan trên đĩa và thời gian chờ đợi lâu trên mỗi I / O.”

Nút thắt cổ chai của chúng tôi đã đến. Chúng tôi đã nghiên cứu chúng một cách cẩn thận khi xem xét vấn đề hiệu suất một cách sâu sắc hơn.

Nhiều nguồn tiềm năng gây tắc nghẽn hiệu suất máy chủ SQL

“Nếu đó là vấn đề I / O thì sao?” Tôi hỏi. “Chúng ta nên xem liệu thời gian chờ của WRITELOG có quá cao so với tổng thời gian chờ hay không. Hoặc, nói về I / O, có thể có vấn đề trong chính SQL. Nếu có mã không hiệu quả, chẳng hạn như THAM GIA NESTED LOOP trên một bảng lớn, thì SQL có thể yêu cầu đọc các hàng trên các ô bên trong bảng theo thời gian. Điều đó thực sự sẽ trừng phạt hiệu suất. ”

“Có thể,” ông chủ nói. “Các phép nối và sắp xếp phức tạp có thể khó khăn, đặc biệt khi cơ sở dữ liệu tempdb không được định cấu hình đúng cách. Tranh chấp Tempdb trông giống như các khóa cơ sở dữ liệu thông thường, nhưng nó thực sự gây tranh cãi vì các quy trình đồng thời đều đang chờ đến lượt chúng trên các trang phân bổ. ”

“Chúng ta có thể sử dụng công cụ nào để kiểm tra tất cả những điều này?” Tôi hỏi.

“SQL Server có một trình biên dịch để kiểm tra các thủ tục được lưu trữ, nhưng nó không được dùng nữa. Những thứ tương tự như vậy là một cách tốt để tìm và chẩn đoán các truy vấn vấn đề, ngay cả khi đó chỉ là bước đầu tiên. Sau đó, có các chế độ xem và chức năng quản lý động giúp bạn theo dõi tình trạng của máy chủ và cơ sở dữ liệu, khắc phục sự cố và điều chỉnh SQL của bạn. ”

“Nhưng SQL Server có rất nhiều phần chuyển động,” tôi nói. “Tôi muốn có một công cụ để xem toàn bộ bức tranh từ bên ngoài vào trong.”

“Tôi cũng vậy, tốt nhất là từ đám mây, vì vậy chúng tôi không cần thêm phần cứng và phần mềm tại chỗ để làm điều đó.”

Giải quyết tắc nghẽn hiệu suất trong SQL Server

Pike đã bắt đầu đông đúc. Và, như ông chủ và tôi sẵn sàng ngồi trong một quán rượu và nói chuyện, dù sao thì đó cũng là tối thứ Sáu. Chúng tôi có những nơi khác để đi, những người khác để xem và những điều khác để nói về.

“Chúng ta nên làm gì khi đã phát hiện ra các điểm nghẽn?” Tôi hỏi.

Ông chủ nói:“Chúng tôi tóm gọn những kẻ tình nghi thông thường. “Để tránh sử dụng quá nhiều bộ nhớ, chúng ta cần thông báo cho các nhà phát triển cơ sở dữ liệu biết mã và truy vấn nào của họ đang làm rò rỉ bộ nhớ. Nếu chúng tôi tìm thấy các hoạt động kết hợp bốn, năm hoặc sáu bảng, chúng tôi sẽ phải cung cấp cho các nhà phát triển một số mẹo điều chỉnh SQL Server và các phương pháp hay nhất để thiết kế lại cơ sở dữ liệu. Hoặc, chúng tôi có thể có quá nhiều chỉ mục và chúng tôi có thể lãng phí các chu kỳ cập nhật chúng; điều đó gây khó khăn cho CPU và I / O vì có quá ít chỉ mục. Chúng tôi có thể gặp sự cố với phân mảnh chỉ mục SQL Server hoặc chúng tôi có thể phải loại bỏ các chỉ mục đã lỗi thời và trùng lặp. ”

“Có lý,” tôi nói. “Có lẽ chúng ta cần phải ném nhiều phần cứng hơn vào nó. Đĩa nhanh hơn có thể giúp giải quyết tắc nghẽn I / O. Ngày càng có nhiều CPU nhanh hơn tạo ra sự khác biệt về thời gian phản hồi truy vấn. Và thêm RAM đồng nghĩa với việc tăng khả năng mở rộng của SQL Server, phải không? ”

“Đúng vậy,” ông chủ nói, “nhưng trước tiên tôi muốn chắc chắn rằng nguyên nhân gốc rễ không phải là vấn đề phát triển hay DevOps. Khi tôi tin rằng không phải vậy, thì tôi sẽ chơi thẻ Mua thêm phần cứng. ”

Chúng tôi ngồi một lúc và xem quán rượu chật kín những người vui chơi vào tối thứ Sáu.

“Sếp,” tôi hỏi, “bạn có nghĩ rằng tất cả những người này đều biết họ đang tồn tại một cách vô tư như thế nào mà không phải chịu gánh nặng về việc xử lý các phiên bị chặn, thời gian chờ I / O tối đa, tuổi thọ trang và tỷ lệ truy cập bộ nhớ đệm không?”

"Đó là một thập giá phải chịu, phải không?" ông chủ trả lời. “Hầu hết mọi người đều không biết chúng tôi phải trải qua những gì. Điều tốt là chúng tôi giải quyết các tắc nghẽn hiệu suất SQL Server một cách lặng lẽ, với rất nhiều áp lực dưới áp lực và một cách tốt như vậy. Nói về khẩu vị tốt, bạn đang làm gì trên nút cổ chai của mình? ”

Tôi đã kiểm tra. “Nút thắt cổ chai của tôi là trống rỗng. Chai của tôi cũng vậy. ”

"Của tôi cũng thế. Thời gian để đi. Chúng tôi có việc phải làm. ”

Có thể sử dụng hệ thống nghẽn máy chủ SQL bằng không?

Chúng tôi biết có những bước chúng tôi có thể thực hiện để tránh ba loại tắc nghẽn SQL Server phổ biến này. Nhưng liệu có thể định cấu hình cơ sở dữ liệu SQL Server tốt đến mức nó không bị tắc nghẽn không?

Câu trả lời ngắn gọn có lẽ là không. Ngay cả những DBA siêng năng nhất cũng sẽ có hiện tượng tắc nghẽn SQL Server thỉnh thoảng xuất hiện. Nhưng bạn có thể thực hiện các bước để chủ động tránh tắc nghẽn và giảm thiểu tác động của chúng đến hiệu suất. Ví dụ:Brent Ozar đưa ra một số mẹo hay để theo dõi bộ đếm Perfmon để điều chỉnh SQL Server của bạn và bạn có thể sử dụng chế độ xem sys.dm_os_performance_counters để giúp xác định các nút thắt cổ chai và khắc phục chúng một cách nhanh chóng.

Sự tắc nghẽn của SQL Server là một thực tế của cuộc sống DBA. May mắn thay, với sự giám sát đầy đủ, theo dõi cẩn thận và điều chỉnh truy vấn thường xuyên, các vấn đề về hiệu suất có thể được xử lý trước khi người dùng thậm chí biết có sự cố.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Tạo bảng từ tập lệnh SQL

  2. Phiên bản có tên SQL Server với dự án Visual Studio 2017 Installer

  3. Cách tốt nhất để cắt bớt ngày trong SQL Server là gì?

  4. Bảng SQL Server:sự khác biệt giữa @, # và ## là gì?

  5. Cách chuyển các tham số giá trị bảng sang thủ tục được lưu trữ từ mã .net