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

Thủ thuật điều chỉnh hiệu suất yêu thích

Đây là danh sách hữu ích và thú vị về những điều tôi luôn cung cấp cho ai đó hỏi tôi về tối ưu hóa.
Chúng tôi chủ yếu sử dụng Sybase, nhưng hầu hết các lời khuyên sẽ áp dụng trên toàn diện.

Ví dụ:SQL Server đi kèm với một loạt các bit điều chỉnh / giám sát hiệu suất, nhưng nếu bạn không có bất kỳ thứ gì như vậy (và thậm chí nếu bạn có) thì tôi sẽ xem xét những điều sau ...

99% sự cố Tôi đã thấy nguyên nhân là do đặt quá nhiều bảng trong một tham gia . Cách khắc phục là thực hiện một nửa phép nối (với một số bảng) và lưu kết quả vào bộ nhớ cache trong một bảng tạm thời. Sau đó, thực hiện phần còn lại của truy vấn nối trên bảng tạm thời đó.

Danh sách kiểm tra tối ưu hóa truy vấn

  • Chạy CẬP NHẬT THỐNG KÊ trên các bảng bên dưới
    • Nhiều hệ thống chạy điều này như một công việc hàng tuần được lên lịch
  • Xóa các bản ghi khỏi các bảng bên dưới (có thể lưu trữ các bản ghi đã xóa)
    • Cân nhắc thực hiện việc này tự động mỗi ngày một lần hoặc mỗi tuần một lần.
  • Tạo lại chỉ mục
  • Tạo lại bảng (xuất / nhập dữ liệu bcp)
  • Kết xuất / Tải lại cơ sở dữ liệu (mạnh mẽ, nhưng có thể sửa lỗi)
  • Xây dựng chỉ mục mới, phù hợp hơn
  • Chạy DBCC để xem có khả năng bị hỏng trong cơ sở dữ liệu không
  • Khóa / Chốt lại
    • Đảm bảo không có quy trình nào khác đang chạy trong cơ sở dữ liệu
      • Đặc biệt là DBCC
    • Bạn đang sử dụng khóa cấp độ hàng hoặc cấp độ trang?
    • Khóa riêng các bảng trước khi bắt đầu truy vấn
    • Kiểm tra để đảm bảo rằng tất cả các quy trình đang truy cập các bảng theo cùng một thứ tự
  • Các chỉ số có được sử dụng một cách thích hợp không?
    • Các phép nối sẽ chỉ sử dụng chỉ mục nếu cả hai biểu thức chính xác là cùng một kiểu dữ liệu
    • Chỉ mục sẽ chỉ được sử dụng nếu (các) trường đầu tiên trên chỉ mục được khớp trong truy vấn
    • Các chỉ số được phân nhóm có được sử dụng khi thích hợp không?
      • dữ liệu phạm vi
      • Trường WHERE giữa value1 và value2
  • Tham gia nhỏ là Tham gia tốt
    • Theo mặc định, trình tối ưu hóa sẽ chỉ xem xét các bảng 4 tại một thời điểm.
    • Điều này có nghĩa là khi kết hợp với nhiều hơn 4 bảng, nó có cơ hội tốt để chọn một kế hoạch truy vấn không tối ưu
  • Chia tay Tham gia
    • Bạn có thể chia tay tham gia không?
    • Chọn trước các khóa ngoại vào một bảng tạm thời
    • Thực hiện một nửa phép nối và đưa kết quả vào một bảng tạm thời
  • Bạn có đang sử dụng đúng loại bảng tạm thời không?
    • #temp bảng có thể hoạt động tốt hơn nhiều so với @table các biến có khối lượng lớn (hàng nghìn hàng).
  • Duy trì các Bảng Tóm tắt
    • Xây dựng bằng trình kích hoạt trên các bảng bên dưới
    • Xây dựng hàng ngày / hàng giờ / v.v.
    • Xây dựng đặc biệt
    • Xây dựng tăng dần hoặc chia nhỏ / xây dựng lại
  • Xem kế hoạch truy vấn là gì với SET SHOWPLAN ON
  • Xem điều gì đang thực sự xảy ra với CÀI ĐẶT THỐNG KÊ IO ON
  • Buộc lập chỉ mục bằng pragma:(index:myindex)
  • Bắt buộc thứ tự bảng bằng cách sử dụng BẬT LỰC LƯỢNG BẬT
  • Đánh giá tham số:
    • Chia nhỏ quy trình đã lưu trữ thành 2
    • gọi proc2 từ proc1
    • cho phép trình tối ưu hóa chọn chỉ mục trong proc2 nếu @parameter đã được thay đổi bởi proc1
  • Bạn có thể cải thiện phần cứng của mình không?
  • Bạn đang chạy lúc mấy giờ? Có thời gian nào yên tĩnh hơn không?
  • Máy chủ Nhân rộng (hoặc quy trình không ngừng khác) có đang chạy không? Bạn có thể đình chỉ nó? Chạy nó, ví dụ. hàng giờ?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ mục bao gồm và Truy vấn được che trong SQL Server là gì?

  2. Lỗi máy chủ SQL 111:“… phải là câu lệnh đầu tiên trong một loạt truy vấn”

  3. Sự kiện chờ SQL Server -3

  4. Cách trả lại tất cả các ràng buộc khóa ngoại bị vô hiệu hóa trong SQL Server (Ví dụ T-SQL)

  5. Cách tối ưu hóa việc sử dụng mệnh đề OR khi được sử dụng với các tham số (SQL Server 2008)