Chúng tôi có một cơ sở dữ liệu rất lớn WriteDB
, lưu trữ dữ liệu giao dịch thô và chúng tôi sử dụng bảng này để ghi nhanh. Sau đó, với các kịch bản sql tôi nhập dữ liệu từ WriteDB
vào ReadDB
trong cùng một bảng tương tự, nhưng mở rộng với một số giá trị bổ sung + quan hệ được thêm vào. Nhập tập lệnh giống như sau:INSERT INTO đi chậm hơn nhiều so với thời gian trong SQL Server 2012
TRUNCATE TABLE [ReadDB].[dbo].[Price]
GO
INSERT INTO [ReadDB].[dbo].[Price]
SELECT a.*, 0 as ValueUSD, 0 as ValueEUR
from [WriteDB].[dbo].[Price] a
JOIN [ReadDB].[dbo].[Companies] b ON a.QuoteId = b.QuoteID
Vì vậy, ban đầu có khoảng 130 triệu. các hàng trong bảng này (~ 50GB). Mỗi ngày một số người trong số họ thêm vào, một số người trong số họ thay đổi, vì vậy ngay bây giờ chúng tôi quyết định không phức tạp hơn logic và chỉ cần nhập lại tất cả dữ liệu. Vấn đề là vì một số lý do với thời gian tập lệnh này hoạt động lâu hơn và lâu hơn, trên cùng một lượng dữ liệu. Lần chạy đầu tiên mất ~ 1h, bây giờ nó đã được chụp 3h
Máy chủ SQL sau khi nhập không hoạt động tốt. Sau khi nhập (hoặc trong khi nó) nếu tôi cố gắng chạy các truy vấn khác nhau, thậm chí đơn giản nhất chúng thường không thành công với các lỗi hết thời gian chờ.
Lý do của hành vi xấu như thế nào và cách khắc phục điều này?
Có hai phần này - INSERT và SELECT. Tìm ra cái nào bằng cách chạy lệnh SELECT. –
Máy chủ có bao nhiêu bộ nhớ? Nó có thể là bộ làm việc vượt quá bộ nhớ dần dần theo thời gian. – usr
@usr Máy chủ có ram 64GB, 55GB được gửi đến máy chủ SQL. Tất cả bộ nhớ có sẵn do MS SQL tiêu thụ. Loại đĩa - HDD tôi nghĩ. Nhưng cấu hình máy chủ không thay đổi theo thời gian - vì vậy tôi không thể hiểu được sự xuống cấp hiệu suất này. – Ph0en1x