ประสิทธิภาพการแทรกของ SQL Server 2016 เทียบกับ 2012


14
  • ฉันมี SQL Server สองอินสแตนซ์บนเซิร์ฟเวอร์เดียวกัน:

    • Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) รุ่นมาตรฐาน (64 บิต)
    • Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) รุ่นองค์กร (64 บิต)
  • ผลลัพธ์ sp_configure เหมือนกันทั้งสองอินสแตนซ์ (ยกเว้นตัวเลือกใหม่ 2016)

  • ฉันสร้างฐานข้อมูลใหม่บนทั้งสองอินสแตนซ์ในโฟลเดอร์ดิสก์เดียวกัน พารามิเตอร์ Autogrowth เหมือนกัน

  • ตัวเลือกสถิติอัตโนมัติและการอัปเดตอัตโนมัติถูกปิด

  • จากนั้นฉันได้ทำการทดสอบโดยมีใบมีด 10,000 อันเข้าไปในกอง:

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

ผล 1

เวลาทดสอบเฉลี่ย

  • 2555 - 530 มิลลิวินาที
  • 2559 - 600 ms

ดังนั้น 2559 จะช้ากว่าประมาณ 11%

  • จากนั้นฉันทำการติดตาม SQL Profiler ด้วยผลลัพธ์ที่บันทึกไว้ในตารางเพื่อดูระยะเวลาการแทรกครั้งเดียวในหน่วยไมโครวินาที

ผล 2

ฮิสโตแกรมของระยะเวลาการแทรกครั้งเดียวปี 2012 เทียบกับปี 2559: ป้อนคำอธิบายรูปภาพที่นี่

การเติบโตของบันทึกการทำธุรกรรมจาก sys.dm_io_virtual_file_stats คือ:

  • 2012 - 5174784 ไบต์
  • 2016 - 5171200 ไบต์

ในระหว่างการทดสอบทั้งสองกรณีจะเริ่มขึ้น แต่มีการทดสอบหนึ่งครั้งทำงานที่หนึ่งครั้งในแต่ละครั้ง ฉันได้จัดสรร RAM 8Gb ต่ออินสแตนซ์แล้ว แผนแบบสอบถามเหมือนกัน มันน่าสนใจที่จะเรียกใช้แต่ละอินสแตนซ์ในกล่องของมันเอง แต่อาจเป็นหนึ่งในเครื่องที่ดีกว่าเพราะที่นี่เราไม่มีฮาร์ดแวร์และความแตกต่างที่ซ่อนเร้น

คำถาม

  • ทำไมปี 2559 ถึงช้ากว่า
  • ใครบางคนอาจทำซ้ำการทดสอบนี้

การเปลี่ยนแปลงใด ๆ กับ TF 692 บน SQL Server 2016 blogs.msdn.microsoft.com/sql_server_team/…
Joe Obbish

"การเปลี่ยนแปลงใด ๆ กับ TF 692 บน SQL Server 2016" ไม่มีการเปลี่ยนแปลง
Olga Sosonnykh

1
ฉันจะทำการทดสอบอีกครั้ง แต่ปิดอินสแตนซ์แฝงเมื่อทำการทดสอบ อินสแตนซ์ 2012 อาจเรียกใช้จุดตรวจสอบหรือกระบวนการ async อื่น ๆ เมื่อคุณเสร็จสิ้นการทดสอบโดยใช้ทรัพยากรห่างจากอินสแตนซ์ 2016
Nabil Becker

1
นอกจากนี้ทั้งสองอินสแตนซ์ควรได้รับการแก้ไขอย่างสมบูรณ์ดังนั้น SQL 2016 SP 2 CU 2 และ SQL 2012 SP4 + GDR ( support.microsoft.com/en-us/help/4057116/ … )
David Browne - Microsoft

3
นอกจากนี้หากไม่มีธุรกรรมที่ชัดเจนเพียงแค่ทดสอบว่าต้องใช้เวลานานเท่าใดในการล้างไฟล์บันทึก
David Browne - Microsoft

คำตอบ:


1

เห็นได้ชัดว่ามันยากมากที่การมีเวอร์ชั่นเดียวกันในเซิร์ฟเวอร์เดียวกัน แต่ ... ฉันหวังว่าผลลัพธ์ของฉันจะช่วยคุณได้ ฉันมีเครื่องที่แตกต่างกันสองเครื่องที่กำหนดค่าทั้ง Windows Server 2012 R2 Standard น่าเสียดายที่พวกเขาไม่มีฮาร์ดแวร์เดียวกัน แต่คล้ายกัน:

  1. เครื่องจักร 1 (SQL Server 2016)

    • หน่วยประมวลผล: Intel (R) Xeon (r) CPU X5650 @ 2.67GHz
    • Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 29 เมษายน 2559 23:23:58 ลิขสิทธิ์ (c) Microsoft Corporation Standard Edition (64- บิต) บน Windows Server 2012 R2 มาตรฐาน 6.3 (รุ่น 9600:) (Hypervisor)
  2. เครื่อง 2 (SQL Server 2012)

    • หน่วยประมวลผล: Intel (R) Xeon (R) CPU E5-2667 0 @ 2.9 GHz
    • Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 14 พฤษภาคม 2014 18:34:29 ลิขสิทธิ์ (c) Microsoft Corporation Standard Edition (64 บิต) บน Windows NT 6.3 (รุ่น 9600:) (Hypervisor)

และฉันทำงาน 5 ครั้งในทั้งสองเครื่องสคริปต์เดียวกันกับที่คุณให้และรับค่าเฉลี่ยต่อไปนี้:

  • 2555: 9961
  • 2559: 8971

อะไรคือผลลัพธ์ที่ตรงกันข้ามที่คุณได้รับ อย่างไรก็ตามอย่างที่คุณได้เห็นเครื่อง 2012 ของฉันมีตัวประมวลผลที่ดีกว่า แต่ฮาร์ดดิสก์ที่โดยปกติคือสิ่งที่แสดงให้เห็นถึงความแตกต่างเหมือนกัน ดังนั้นแม้ว่า 2012 จะมีแหล่งข้อมูลที่ดีกว่าก็จะช้าลงเล็กน้อยสำหรับกรณีของฉัน

(ขออภัยโปรดตรวจสอบอีกครั้งเวอร์ชันแรกของฉันมีข้อผิดพลาดที่สำคัญ)


-2

คุณสามารถเพิ่ม(TABLOCK) คำใบ้เพื่อเปิดใช้การบันทึกขั้นต่ำได้หรือไม่ อะไรคือความแตกต่างหลังจากใช้คำแนะนำนี้?

INSERT INTO t_heap WITH (TABLOCK) 
SELECT * 
FROM t_source
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.