Có thể xây dựng lại các chỉ mục gây ra hiệu suất tồi tệ hơn sau khi xây dựng lại kết thúc?


7

Chúng tôi có một cơ sở dữ liệu khách hàng bị phân mảnh lớn - thực tế mỗi bảng có hơn 1000 trang có độ phân mảnh> 95%. Các yếu tố điền được đặt thành các giá trị hợp lý, nhưng việc sử dụng không gian trang không ở đâu gần với hệ số điền cho hầu hết các bảng.

Đây là kết quả của việc không bảo trì được thực hiện trên cơ sở dữ liệu.

Xây dựng lại các chỉ mục bằng cách sử dụng IndexOptizing của Ola Hallengren làm giảm sự phân mảnh như mong đợi. Trên phần cứng sản xuất hiện có, hiệu suất của ứng dụng được cải thiện như mong đợi. Tất cả các số liệu tôi thường sử dụng - số liệu thống kê của khách hàng về các truy vấn nặng, thời lượng hồ sơ, quầy đọc / ghi, nhật ký ứng dụng và nhận thức của người dùng - cho thấy hiệu suất được cải thiện.

Tuy nhiên, một máy chủ cơ sở dữ liệu mới được hỗ trợ với SSD Intel PCIe đang cho thấy điều ngược lại với những gì chúng ta mong đợi. Phân mảnh cao, ứng dụng hoạt động tốt. Sau khi xây dựng lại các chỉ mục, ứng dụng hoạt động kém. Một số thao tác mất ~ 90 giờ mất ~ 6 phút. Tuy nhiên, không có số liệu nào khác xuất hiện cho thấy hệ thống đang hoạt động chậm hơn.

Đây có phải là điều mà bất cứ ai khác đã trải nghiệm?


3
Có thể thử nhìn vào kế hoạch truy vấn của bạn. Có thể bạn đang trải qua việc đánh hơi thông số.
Tái lập

2
Đồng ý với @Reaces. Xây dựng lại các chỉ mục sẽ có các số liệu thống kê cập nhật và các kế hoạch truy vấn hiện tại không hợp lệ. Có thể bạn không may mắn với các giá trị tham số được thông qua khi gói mới được biên dịch.
Martin Smith

Ok - đó là điều mà tôi không biết. Tôi đoán rằng tôi có thể kiểm tra điều này bằng cách sử dụng "DBCC FREEPROCCACHE" trên hệ thống bị phân mảnh và xem mức độ suy giảm hiệu năng tồi tệ được đưa ra chính xác cho cùng một hoạt động.
Cyberg Ribbon

2
Và trước khi thực hiện, hãy xem STATISTICS IOđọc trước đọc / đọc vật lý để xem liệu truy vấn 6 phút thậm chí có đọc từ đĩa không.
Martin Smith

Độ cân bằng của đọc để ghi là cực kỳ cao và hệ thống có quá nhiều RAM để chứa toàn bộ DB trong bộ nhớ, vì vậy tôi sẽ tưởng tượng rằng các lần đọc từ đĩa phải thấp - điều này làm cho hành vi trở nên tồi tệ hơn.
Cyberg Ribbon

Câu trả lời:


11

Có, xây dựng lại các chỉ mục (đặc biệt là trên SSD) có thể gây ra hiệu suất kém hơn. Hầu hết các SSD tốc độ cao thích nhiều yêu cầu khối nhỏ hơn thay vì ít hơn, yêu cầu lớn hơn. Đây chính xác là mô hình ngược lại được ưa thích bởi truyền thống, quay gỉ.

Giả sử bạn có một cây B bị phân mảnh cao. Vì không có gì được đặt hàng trên đĩa, thông thường bạn sẽ đưa ra rất nhiều yêu cầu I / O 8KB để quét cây. Nếu bạn đã chống phân mảnh cây, thì bạn có thể nhận tới 512KB trong một yêu cầu. Những yêu cầu lớn đó sẽ có độ trễ cao hơn trên SSD, vì SSD bên trong phá vỡ nó thành các khối 8KB (không giống như ổ cứng, sẽ phát hành I / O tuần tự). Đối với nhiều trường hợp: Độ trễ đĩa cao hơn = truy vấn chậm hơn

Tất cả những gì đang được nói, xin vui lòng đảm bảo rằng bạn kiểm tra xem bạn có thực sự nhận được cùng một kế hoạch truy vấn mà bạn đã nhận được trước khi xây dựng lại không.

Cuối cùng: Trừ khi bạn thiếu dung lượng, tại sao bạn lại lãng phí thời gian DBA quý giá của mình với việc xây dựng lại chỉ mục khi bạn chạy trên SSD?


Việc xây dựng lại đang diễn ra vì một vài lý do - một kế hoạch bảo trì nhất quán trên tất cả các cơ sở dữ liệu mà không phải lo lắng về phần cứng cơ bản, nhận thức rằng miễn là việc xây dựng lại có thể sẽ không bị phạt bất kể phần cứng và để duy trì việc sử dụng không gian trang hợp lý (tôi nghĩ rằng điều này sẽ gây ra vấn đề bất kể lưu trữ).
Cyberg Ribbon

1
Bạn có thể muốn xem xét các chiến lược xây dựng lại khác nhau cho cơ sở dữ liệu cư trú trên SSD. Bạn có thể chỉ đơn giản là ghi các chu kỳ ghi CPU và SSD mà không đạt được (hoặc thậm chí là hồi quy).
Thomas Kejser

Làm thế nào để bạn giải thích rằng hiệu suất giảm từ 90 giây xuống 360 giây chỉ bằng cách xây dựng lại một chỉ mục? Hiệu suất không nên giảm vì SSD hoạt động chính xác như trước. @Cyberg Ribbon, bạn có thể xác minh nếu kế hoạch thực hiện thay đổi? Nghe có vẻ giống như một vấn đề có thể.
ora-600

Như ora-600 nói, cổng cuộc gọi đầu tiên của bạn thực sự là để xác minh rằng các kế hoạch không thay đổi. Đó là lời giải thích rất có thể .... Nếu bạn đã xác định rằng bạn đang có cùng một kế hoạch trong kịch bản trước / sau - thì bạn có thể xem xét các trường hợp đặc biệt của SSD chậm hơn. Ngoài ra, sẽ hữu ích nếu bạn thêm truy vấn vào câu hỏi của bạn.
Thomas Kejser

1
@ ora-600: SSD cũng đọc tương tự, nhưng thứ tự những lần đọc đó trở lại trong các vấn đề. Lấy ví dụ về phép nối vòng lặp đơn giản giữa hai bảng với quét phạm vi và tỷ lệ nhấn bộ đệm thấp. Bảng bên ngoài phải chờ I / O bên trong hoàn thành để tiến bộ. Nếu quét bên trong trở lại thường xuyên, trong các khối nhỏ tại một thời điểm, thì phần bên ngoài của vòng lặp làm cho tiến trình nhanh hơn, thúc đẩy song song. Tổng số lượng hoạt động I / O tăng lên (mặc dù các byte đọc là như nhau), nhưng tốc độ của kế hoạch cũng vậy
Thomas Kejser

8

Phân mảnh cao, ứng dụng hoạt động tốt. Sau khi xây dựng lại các chỉ mục, ứng dụng hoạt động kém.

Một nguyên nhân có thể là do kích thước thay đổi (có lẽ giảm) của các cấu trúc sau khi xây dựng lại có nghĩa là trình tối ưu hóa đang chọn một kế hoạch khác. Một trong những yếu tố đầu vào chính cho mô hình chi phí của trình tối ưu hóa là số lượng trang mà mỗi nhà khai thác kế hoạch dự kiến ​​sẽ xử lý.

Thay đổi số lượng trang trong cấu trúc có thể dễ dàng tạo ra sự khác biệt giữa trình tối ưu hóa chọn hàm băm hoặc hợp nhất, so với chiến lược vòng lặp lồng nhau (có hoặc không có ống chỉ). Đó chỉ là một ví dụ; sự khác biệt về chi phí có thể ảnh hưởng đến tất cả các khía cạnh của sự lựa chọn kế hoạch, bao gồm cả quyết định sử dụng song song hay không.

Để tạo ra sự khác biệt về hiệu suất mà bạn đang quan sát (và cũng đang xem xét việc thiếu I / O vật lý), đây có vẻ như là lời giải thích khả dĩ nhất (giả sử bạn có thể loại bỏ thông số 'xấu' đánh hơi).

Tất cả những gì đã nói, không có chi tiết (kế hoạch lý tưởng và số liệu chi tiết cho một trường hợp duy nhất của vấn đề trước và sau khi xây dựng lại), câu hỏi hiện tại được cho là rất dựa trên quan điểm, sẽ khiến nó trở thành chủ đề cho trang web này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.