Chúng tôi có cơ sở dữ liệu sản xuất khổng lồ, kích thước của nó là khoảng 300GB. Có cách tiếp cận nào để cải thiện hiệu năng của truy vấn xóa không? Hiện tại tốc độ xóa là từ 1-10k mỗi phút, nó rất chậm đối với chúng tôi.
Chúng tôi có cơ sở dữ liệu sản xuất khổng lồ, kích thước của nó là khoảng 300GB. Có cách tiếp cận nào để cải thiện hiệu năng của truy vấn xóa không? Hiện tại tốc độ xóa là từ 1-10k mỗi phút, nó rất chậm đối với chúng tôi.
Câu trả lời:
Nếu bạn đang cố gắng xóa một số lượng lớn các hàng trong một câu lệnh, thì có khả năng bạn đang chờ hoạt động nhật ký. Vì vậy, bạn có thể:
TRUNCATE
hoặc DROP
/ CREATE
.SELECT INTO
để đặt dữ liệu bạn muốn giữ vào một bảng khác, sau TRUNCATE
đó di chuyển phần nhỏ trở lại. (Hoặc chỉ cần bỏ bảng cũ, đổi tên bảng mới và áp dụng lại các ràng buộc / quyền, v.v.)CHECKPOINT
xóa nhật ký thay vì sao lưu nhật ký, nhưng bạn cần chắc chắn đặt lại và thực hiện sao lưu toàn bộ mới để khởi tạo lại chuỗi nhật ký .Có một số gợi ý, nhưng bạn đang sử dụng phiên bản nào? Có phải là phiên bản doanh nghiệp? Dù sao:
Thêm chi tiết, khi bạn làm việc với cơ sở dữ liệu lớn, không có một câu trả lời hợp lệ nào.
Bạn nên thử xóa từng đoạn một, có thể xóa trong vòng lặp, mỗi lần lặp lại đó là giao dịch riêng và sau đó xóa nhật ký ở cuối mỗi lần lặp.
Ngoài ra, bạn sẽ cần tìm số mà bạn sẽ sử dụng làm giá trị trong khối để xóa các bản ghi. Nó đòi hỏi phải kiểm tra kỹ lưỡng, sẽ tốt hơn nếu bạn có thể kiểm tra giá trị khối trong UAT trước.
Về cách tiến hành, sẽ giới thiệu cho bạn để chia các thao tác xóa lớn thành các khối
xóa có thể chậm nếu bảng lớn có khóa ngoại đệ quy.
nếu vậy, hãy tìm thời điểm thích hợp, vô hiệu hóa các dịch vụ phụ thuộc, vô hiệu hóa khóa ngoại đệ quy, thực hiện xóa lớn, sau đó khôi phục lại khóa ngoại.
Thêm vài điểm nữa ...
tablock
tùy chọn.Để nhận thêm trợ giúp, hãy đăng truy vấn bạn đang sử dụng, thông tin bảng cộng với bất kỳ thông tin chặn nào.