SSMS
 sql >> Cơ Sở Dữ Liệu >  >> Database Tools >> SSMS

Ước tính bản số sai đến từ các kế hoạch thực thi SSMS

Tôi có một số người cảm ơn vì bản cập nhật gần đây cho SQL Sentry Plan Explorer. Brooke Philpott (@Macromullet) và Greg Gonzalez (blog | @SQLsensei), tất nhiên, cho R &D và để đào sâu mã và phân loại nó ra. Nhưng cũng gửi đến Paul White (blog | @SQL_kiwi) vì đã kiên trì giúp chúng tôi xác thực các bản sửa lỗi.

Vấn đề mà Paul đã phát hiện ra là SQL Server 2008+ làm xáo trộn các ước tính về bản số trên các truy vấn nhất định khi có liên quan đến việc tra cứu khóa hoặc RID. Tôi sẽ giải thích sâu hơn cho bài đăng trên blog của Paul và lỗi mà anh ấy đã gửi trên Connect, nhưng ngắn gọn là chúng tôi đang sử dụng những ước tính bị sai lệch này, tin rằng chúng và ngoại suy chúng để hiển thị cho bạn thông tin "tốt hơn". Thật không may, như Paul giải thích, chúng tôi đã bị lừa.

Paul hiển thị truy vấn sau đối với một bản sao của AdventureWorks 2005.

SELECT
    th.ProductID,
    th.TransactionID,
    th.TransactionDate
FROM Production.TransactionHistory AS th 
WHERE 
    th.ProductID = 1 
    AND th.TransactionDate BETWEEN '20030901' AND '20031231';

Management Studio đưa ra kế hoạch sau, giống như Paul đã mô tả:

Trong Plan Explorer, chúng tôi đã cố gắng hữu ích bằng cách nhân số hàng ước tính (làm tròn thành 17) với số lần thực thi (45) và đưa ra 765:

Đối với hầu hết các toán tử, cách tiếp cận này mang lại dữ liệu phù hợp, nhưng do lỗi này trong SQL Server, nó không chính xác đối với tra cứu khóa / RID. Chúng tôi đã điều chỉnh điều đó và phát hành bản sửa lỗi thích hợp trong 7.2.42.0 (tải xuống ngay bây giờ!). Sơ đồ đồ họa hiện hiển thị đúng số lượng hàng chính xác cho cả hai ước tính:

Và thực tế:

Tôi sẽ nhắc lại lời cảnh báo của Paul: Hãy coi chừng các ước lượng về bản số kém khi một vị từ được áp dụng như một phần của tra cứu.

Có một số vấn đề phức tạp hơn gây ra bởi những ước tính sai lệch này, mà chúng tôi cũng đã giải quyết. Tôi sẽ viết blog về một vài trong số đó trong một bài đăng tiếp theo - đối với bài đăng này, tôi chỉ muốn chứng minh rằng chúng tôi đã nhanh chóng giải quyết vấn đề cụ thể mà Paul đã nêu bật trong bài đăng của anh ấy.


  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Kết nối SQL Server Management Studio mặc định là 'chính' khi chọn một đối tượng dành riêng cho cơ sở dữ liệu

  2. Cách chỉnh sửa MULTIPLE hàng / mục nhập dữ liệu trong SQL Server Management Studio

  3. Lưu kết quả với tiêu đề trong Sql Server Management Studio

  4. Làm cách nào để cấp quyền truy cập đọc cho người dùng vào cơ sở dữ liệu trong SQL Server?

  5. trích xuất văn bản từ cột và sao chép nó vào một cột mới