Tôi có hai phiên bản SQL Server trên cùng một máy chủ:
- Phiên bản tiêu chuẩn Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) (64-bit)
- Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - Phiên bản doanh nghiệp 13.0.4451.0 (X64) (64-bit)
kết quả sp_cool là giống nhau trên cả hai trường hợp (ngoại trừ các tùy chọn mới năm 2016).
Tôi đã tạo cơ sở dữ liệu mới trên cả hai trường hợp trên cùng một thư mục đĩa. Thông số tự động là như nhau.
Tùy chọn thống kê tự động và tự động tắt được tắt.
Sau đó, tôi đã thực hiện một thử nghiệm với 10000 lần chèn thành một đống:
set nocount on
go
create table dbo.TestInsert ( i int not null, s varchar(50) not null )
declare @d1 datetime, @d2 datetime, @i int
set @d1 = getdate()
set @i = 1
while @i <= 10000
begin
insert into dbo.TestInsert ( i, s ) select @i, replicate( 'a', 50 )
set @i = @i + 1
end
set @d2 = getdate()
select datediff(ms, @d1, @d2)
drop table dbo.TestInsert
Kết quả 1
Thời gian kiểm tra trung bình
- 2012 - 530 ms
- 2016 - 600 ms
Vì vậy, năm 2016 chậm hơn khoảng 11%.
- Sau đó, tôi đã thực hiện theo dõi SQL Profiler với kết quả được lưu vào bảng để xem thời lượng chèn duy nhất tính bằng micrô giây.
Kết quả 2
Biểu đồ của thời gian chèn đơn 2012 so với năm 2016:
Tăng trưởng của nhật ký giao dịch từ sys.dm_io_virtual_file_stats là:
- 2012 - 5174784 byte
- 2016 - 5171200 byte
Trong các thử nghiệm cả hai trường hợp được bắt đầu. Nhưng một bài kiểm tra chỉ chạy ở một trường hợp mỗi lần. Tôi đã phân bổ RAM 8Gb mỗi lần. Các kế hoạch truy vấn là như nhau. Sẽ rất thú vị khi chạy từng trường hợp trên hộp riêng của nó. Nhưng có lẽ một máy tốt hơn, bởi vì ở đây chúng tôi không có sự khác biệt ẩn về phần cứng và môi trường.
Câu hỏi
- Tại sao năm 2016 chậm hơn?
- Ai đó có thể sao chép bài kiểm tra này?