2010-08-19 28 views
7

Tôi mới được làm việc với nhiều dữ liệu này (20 triệu dòng) và tôi không biết những gì tôi nên mong đợi như xa như thời gian truy vấn:Cập nhật tuyên bố chạy quá lâu hoặc không

update table set field = '1234' 

Không chỉ mục trên trường. Tuyên bố này mất 25 phút. Cơ sở dữ liệu được đặt thành Khôi phục đơn giản. Có 25 phút có vẻ quá dài? Bảng có 9 cột với các kiểu dữ liệu nhỏ < 50 varchar.

+1

Điều gì về tải trên máy chủ? Bạn đã xem Profiler để xem liệu hộp có bị đánh thuế cho CPU hay bộ nhớ không? –

+0

Bạn đang cập nhật 20 triệu hàng? Vui lòng cho tôi biết bạn có mệnh đề where trong bản cập nhật thực tế của bạn. – Beth

+0

@OMG Ngựa vằn: Chúng tôi vừa cài đặt Windows Server 2008 R2 và tôi đã xem quy trình máy chủ sql, nó đang sử dụng tất cả trừ 28 MB RAM. –

Trả lời

12

NẾU bạn đã cập nhật 20M hàng trong một giao dịch, thì thời gian của bạn hoàn toàn được điều khiển bởi hệ thống phụ IO của bạn: loại ổ đĩa bạn có, bố cục tệp đĩa, v.v. Nếu bạn có 40 cọc trong cuộc đột kích 10 với 4 tệp cân bằng và một pin tương tự riêng cho nhật ký thì kết quả sẽ rất chậm. Nếu bạn thử nghiệm điều này với một MDF duy nhất chia sẻ trục chính với LDF trên một ổ cứng 5000rpm chất lượng tiêu dùng duy nhất thì thời gian của bạn nhanh chóng đáng kinh ngạc.

+0

+1: IO có phải là vấn đề đối với các trường hợp như thế này không, hoặc có điểm bùng phát mơ hồ không? –

+1

Đối với 20M hàng trong một bản cập nhật duy nhất, tất cả sẽ được điều khiển bởi nhật ký có thể tuôn ra nhanh như thế nào, với một số đột biến khi các điểm kiểm tra DB khởi động do áp lực vùng đệm cho các trang miễn phí. –

+3

Dấu hiệu báo hiệu sẽ là giá trị trung bình. Độ dài hàng đợi đĩa' (> 2 mỗi trục chính) và giá trị trung bình ' sec/transfer' (> 10ms) hiệu suất quầy. http://msdn.microsoft.com/en-us/library/ms175903.aspx –

0
  • Có chế độ xem được lập chỉ mục nào tham chiếu đến trường đó không?
  • Trường đó có được xuất bản theo sơ đồ sao chép (giao dịch) không?
  • Các phiên khác có đang truy cập vào bảng đó cùng một lúc bản cập nhật đang chạy không?
  • Các tệp nhật ký và dữ liệu được lưu trữ trên các đĩa riêng biệt (vật lý, không phải hai phân vùng khác nhau của cùng một phần cứng)?
  • Có bất kỳ ràng buộc kiểm tra nào tham chiếu đến trường đó không?
  • Có bất kỳ trình kích hoạt nào trên bảng đó không?

Tất cả những yếu tố này và nhiều yếu tố khác sẽ ảnh hưởng đến hiệu suất sửa đổi dữ liệu.

Nếu không, hãy thử tạo đợt cập nhật bằng cách sử dụng TOP và mệnh đề WHERE chỉ tìm thấy các hàng được sửa đổi.

+0

Không, không, không, không, không, không. :) –

+0

Tôi đã thử xử lý theo lô nhưng không chắc chắn về kích thước lô. Tôi đã thử 10000 và nó đã lâu hơn nữa. –

2

Bạn đang cập nhật 20 bản ghi Mio trong khoảng 1500 giây tính trung bình ở mức 7000 lần cập nhật mỗi giây. Nghe có vẻ đúng.

+0

Chỉ tò mò là tại sao âm thanh đó đúng? –

+1

vì thứ tự độ lớn nằm trong phạm vi tôi mong đợi, ít hơn 1000 sẽ là lạ hơn 40000. –

Các vấn đề liên quan