Bối cảnh:
Tôi có nhiều cơ sở dữ liệu với số lượng lớn VIEW và số lượng cực lớn của SYNONYM. Ví dụ: một db có hơn 10 nghìn lượt XEM và hơn 2 triệu SYNONYM.
Vấn đề chung:
Các truy vấn liên quan sys.objects
(và các bảng hệ thống nói chung) có xu hướng chậm. Truy vấn liên quan sys.synonyms
là băng hà. Tôi tự hỏi những gì tôi có thể làm để cải thiện hiệu suất.
Ví dụ cụ thể
Lệnh này được điều hành bởi một công cụ của bên thứ ba. Nó chậm trong cả ứng dụng và SSMS:
exec sp_tables_rowset;2 NULL,NULL
Câu hỏi của tôi :
Làm thế nào tôi có thể làm cho điều này chạy nhanh hơn?
Những gì tôi đã thử :
Nếu SET STATISTICS IO ON
tôi nhận được kết quả này:
(2201538 hàng bị ảnh hưởng)
Bảng 'sysobjrdb'. Quét số 1, đọc logic 28, đọc vật lý 0, đọc trước 0, đọc logic 0, đọc vật lý 0, đọc đọc trước 0. đọc
'sysschobjs'. Quét số 1, đọc logic 53926, đọc vật lý 0, đọc trước 0, đọc logic 0, đọc vật lý lob 0, đọc trước đọc 0, đọc trước 0.
Tôi đã có thể cập nhật số liệu thống kê trên các bảng hệ thống cơ bản. Điều này đã hoạt động trong môi trường SQL 2008 R2 hoặc mới hơn của tôi:
UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN
UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN
Tôi cũng đã có thể thực hiện bảo trì chỉ số. Điều này hoạt động trong môi trường SQL 2012 hoặc mới hơn của tôi. Ví dụ, chạy sp_help 'sys.sysschobjs'
xác định các chỉ mục trên bảng và từ đó tôi tạo và chạy các lệnh này:
ALTER INDEX clst ON sys.sysschobjs REORGANIZE
ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc2 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc3 ON sys.sysschobjs REORGANIZE
Cập nhật số liệu thống kê và sắp xếp lại các chỉ mục giúp, nhưng không nhiều.