Câu trả lời:
Có nhiều yếu tố cả bên trong và bên ngoài đối với SQL Server có thể khiến cùng một truy vấn thực hiện khác nhau giữa các môi trường khác nhau, ngay cả khi chúng được cấu hình gần giống nhau, bất kỳ một trong số đó có thể dẫn đến hiệu suất và kế hoạch truy vấn rất khác nhau.
Người phục vụ
Sơ thẩm
Cơ sở dữ liệu
Với tất cả những điều này, không có gì đáng ngạc nhiên khi trong nhiều trường hợp, đơn giản là không thể sao chép hoàn hảo mọi khía cạnh của cơ sở dữ liệu trên các môi trường khác nhau. Mặc dù thử nghiệm có thể cung cấp một mức độ chắc chắn tốt về cách các truy vấn sẽ thực hiện trong từng môi trường, nhưng sẽ không có gì ngạc nhiên nếu có sự khác biệt giữa các môi trường. Khi phát triển một truy vấn mới, điều chỉnh bổ sung thường là cần thiết khi nó chuyển sang sản xuất.
Thông thường, điều chỉnh truy vấn chậm hơn trong một môi trường sẽ không gây ra hồi quy trong các kế hoạch thực hiện được tạo, do đó đây là cơ hội để điều chỉnh các chỉ mục, số liệu thống kê hoặc chính truy vấn để cải thiện tổng thể.
Lưu ý cuối cùng: môi trường thấp hơn không được khai thác quá mức và thường không được mong đợi sẽ mang lại hiệu suất tương tự như môi trường sản xuất hoặc tiền sản xuất.
Nhiêu tai nguyên hơn:
Các câu trả lời khác là tốt, nhưng tôi sẽ nói thêm rằng bạn nên xem xét lượng dữ liệu trong Môi trường B và bất kỳ sự tranh chấp nào với các truy vấn khác.
Một số truy vấn SQL không có vấn đề về hiệu suất trong sự cô lập (ví dụ: 1000 hàng trong bảng, không có truy vấn nào khác đang chạy), nhưng có thể là chương trình kinh dị với 10.000.000 hàng trong bảng (ví dụ: các vấn đề đánh hơi tham số) và / hoặc các truy vấn khác có khả năng ghi vào, cập nhật hoặc khóa các bảng liên quan.
Tôi đồng ý với các câu trả lời khác về việc kiểm tra phần cứng / môi trường / cấu hình khớp trước, nhưng nếu không có gì rõ ràng xuất hiện, hãy bắt đầu xem xét các kế hoạch thực hiện truy vấn, chạy SQL Profiler, v.v.
Nói tóm lại, bạn cần cách ly xem bản thân db có chậm so với bản kia hay môi trường của nó chậm hơn. Loại trừ những điều dễ dàng nhất đầu tiên.
Điều này đã xảy ra với tôi trong một vài dịp. Mỗi lần nó trở thành môi trường: một người khác đang chạy trốn và bỏ đói db IOPS trên một máy chủ.
Chạy một đỉnh (1) trên máy chủ chậm hơn và xem CPU có gặp nhiều trạng thái chờ hay cpu ăn cắp nếu bạn ở trong môi trường ảo.
Điều này cũng sẽ giúp chỉ ra các chỉ mục bị thiếu khiến các kế hoạch thực hiện thực hiện quét toàn bộ bảng thay vì quét chỉ mục (nhưng điều đó dễ dàng phát hiện khi ghi nhật ký truy vấn chậm). Điều này cũng sẽ hiển thị trong ps dưới dạng procs ở trạng thái D.
Khi bạn đã loại trừ điều đó, đã đến lúc đào sâu vào phần cứng: công việc đang được trải rộng trên tất cả các CPU, có một cổng mạng được tự thương lượng lại thành 100Mb. Chạy vmstat và / hoặc iostat trên cả hai máy và so sánh sự khác biệt.
Nếu các bộ dữ liệu giống hệt nhau, liệu cùng một truy vấn có tạo ra cùng một kế hoạch thực hiện trên cả hai không? Các bảng có chứa số lượng hàng giống nhau không? Các định nghĩa chỉ mục có giống nhau không? Các bảng có mức độ phân mảnh tương tự? Số lượng tương tự của các kết nối hoạt động?