Hiệu suất chèn SQL Server 2016 vs 2012


14
  • 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: nhập mô tả hình ảnh ở đây

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?

Có sự thay đổi nào với TF 692 trên SQL Server 2016 không? blogs.msdn.microsoft.com/sql_server_team/...
Joe Obbish

"Mọi thay đổi với TF 692 trên SQL Server 2016" Không có thay đổi.
Olga Sosonnykh

1
Tôi sẽ chạy thử nghiệm một lần nữa, nhưng tắt phiên bản thụ động khi thử nghiệm. Phiên bản 2012 có thể đang chạy một điểm kiểm tra hoặc quá trình không đồng bộ khác sau khi bạn hoàn thành bài kiểm tra của mình, lấy tài nguyên ra khỏi phiên bản 2016.
Nave Becker

1
Ngoài ra cả hai trường hợp nên được vá hoàn toàn, vì vậy SQL 2016 SP 2 CU 2 và SQL 2012 SP4 + GDR ( support.microsoft.com/en-us/help/4057116/ù )
David Browne - Microsoft

3
Ngoài ra, không có giao dịch rõ ràng, việc này chỉ kiểm tra thời gian cần thiết để xóa tệp nhật ký.
David Browne - Microsoft

Câu trả lời:


1

Rõ ràng rất khó để có sự trùng hợp ngẫu nhiên khi có cùng một phiên bản trong cùng một máy chủ nhưng ... tôi hy vọng kết quả của tôi sẽ giúp bạn. Tôi có hai máy khác nhau được cấu hình cả Windows Server 2012 R2 Standard. Thật không may, chúng không có phần cứng giống nhau nhưng tương tự nhau:

  1. Máy 1 (Máy chủ SQL 2016)

    • Bộ xử lý: Intel (R) Xeon (r) CPU X5650 @ 2.67GHz
    • Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 29 tháng 4 năm 2016 23:23:58 Bản quyền (c) Microsoft Corporation Standard Edition (64-bit) trên Windows Server 2012 R2 Standard 6.3 (Build 9600 :) (Hypervisor)
  2. Máy 2 (SQL Server 2012)

    • Bộ xử lý: CPU Intel (R) Xeon (R) E5-2667 0 @ 2.9 GHz
    • Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 14 tháng 5 năm 2014 18:34:29 Bản quyền (c) Microsoft Corporation Standard Edition (64-bit) trên Windows NT 6.3 (Build 9600 :) (Hypervisor)

Và tôi chạy 5 lần trong cả hai máy cùng một kịch bản bạn đã cung cấp và đạt mức trung bình sau:

  • 2012: 9961
  • 2016: 8971

Những gì gần như là kết quả ngược lại mà bạn có được. Dù sao, như bạn đã thấy, máy 2012 của tôi có bộ xử lý tốt hơn nhưng ổ cứng thông thường là thứ cho thấy sự khác biệt là như nhau. Vì vậy, ngay cả khi năm 2012 có tài nguyên tốt hơn thì chậm hơn một chút đối với trường hợp của tôi.

(Xin lỗi, xin vui lòng, kiểm tra lại, phiên bản đầu tiên của tôi có một số lỗi quan trọng)


-2

Bạn có thể thêm (TABLOCK) gợi ý để cho phép đăng nhập tối thiểu? Sự khác biệt sau khi áp dụng gợi ý này là gì?

INSERT INTO t_heap WITH (TABLOCK) 
SELECT * 
FROM t_source
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.