คำถามติดแท็ก sql-server-2016

SQL Server 2016 (รุ่นบิลด์หลัก 13.00.xxxx) โปรดติดแท็ก sql-server ด้วย

2
ประสิทธิภาพการแทรกของ SQL Server 2016 เทียบกับ 2012
ฉันมี 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 …

2
ปัญหาประสิทธิภาพการทำงานที่แปลกกับ SQL Server 2016
เรามีอินสแตนซ์เดียวของ SQL Server 2016 SP1 ที่ทำงานในเครื่องเสมือน VMware มันมี 4 ฐานข้อมูลสำหรับแต่ละแอปพลิเคชันที่แตกต่างกัน แอปพลิเคชั่นเหล่านั้นล้วน แต่อยู่บนเซิร์ฟเวอร์เสมือนแยกกัน ยังไม่มีการใช้งานจริง ผู้คนที่ทดสอบแอพพลิเคชั่นกำลังรายงานปัญหาด้านประสิทธิภาพ นี่คือสถิติของเซิร์ฟเวอร์: 128 GB RAM (หน่วยความจำสูงสุด 110GB สำหรับ SQL Server) 4 คอร์ที่ 4.6 GHz การเชื่อมต่อเครือข่าย 10 GBit ที่เก็บข้อมูลทั้งหมดใช้ SSD ไฟล์โปรแกรมไฟล์บันทึกไฟล์ฐานข้อมูลและ tempdb อยู่บนพาร์ติชันแยกต่างหากของเซิร์ฟเวอร์ asd ผู้ใช้ทำการเข้าถึงหน้าจอเดียวผ่านแอปพลิเคชัน ERP ที่ใช้ C ++ เมื่อฉันทดสอบ SQL Server กับ Microsoft ostressโดยใช้แบบสอบถามขนาดเล็กจำนวนมากหรือแบบสอบถามขนาดใหญ่ฉันได้รับประสิทธิภาพสูงสุด สิ่งเดียวที่ควบคุมปริมาณคือลูกค้าเพราะเขาไม่สามารถตอบได้เร็วพอ แต่เมื่อมีผู้ใช้แทบจะไม่ SQL …

1
จำนวนการกระทำที่ถูกผูกไว้สูงสุดที่อนุญาตสำหรับเหตุการณ์ที่ขยายคืออะไร
หากคุณเพิ่มการกระทำ "มากเกินไป" ให้กับกิจกรรมในเซสชันกิจกรรมคุณจะได้รับข้อผิดพลาดนี้: ข่าวสารเกี่ยวกับ 25639, ระดับ 16, สถานะ 23, บรรทัด 1 เหตุการณ์ "[ชื่อเหตุการณ์]" เกินจำนวนการดำเนินการที่ผูกไว้ที่อนุญาต อนุญาตให้มีการกระทำกี่ครั้ง มันแตกต่างกันไปตามเหตุการณ์? คำตอบขึ้นอยู่กับการทดลองดูเหมือนจะเป็น sqlserver.rpc_completed27 แต่ฉันไม่ได้พบหมายเลขบนใด ๆ ที่เอกสารไมโครซอฟท์ และดูเหมือนว่าจะแตกต่างกันไปจากเหตุการณ์ที่ผมก็สามารถที่จะได้รับ sqlserver.sql_batch_completed30 รหัสตัวอย่างที่ล้มเหลว: CREATE EVENT SESSION [Test] ON SERVER ADD EVENT sqlserver.rpc_completed( ACTION( package0.callstack, package0.collect_cpu_cycle_time, package0.collect_current_thread_id, package0.collect_system_time, package0.event_sequence, package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.numa_node_id, sqlos.scheduler_address, sqlos.scheduler_id, sqlos.system_thread_id, sqlos.task_address, sqlos.task_elapsed_quantum, sqlos.task_resource_group_id, sqlos.task_resource_pool_id, …

1
ย้ายฐานข้อมูล SQL Server 2016 ชั่วคราวไปยัง SQL Server 2017 แล้วย้ายกลับ เป็นไปได้ไหม?
ถ้าฉันทำการสำรองข้อมูลของฐานข้อมูลจากอินสแตนซ์ของ SQL Server 2016 แล้วกู้คืนเป็นอินสแตนซ์ 2017 เพื่อทำงานบางอย่างกับมัน จากนั้นฉันจะสามารถหมุนและสำรองฐานข้อมูลนั้นจากอินสแตนซ์ 2017 และใช้เพื่อแทนที่เวอร์ชันเดิมในอินสแตนซ์ 2016 ได้หรือไม่

2
การแสดงแผนการดำเนินการโดยประมาณจะสร้าง CXPACKET, PAGELATCH_SH และ LATCH_EX [ACCESS_METHODS_DATASET_PARENT] รอ
ผมใช้ Microsoft SQL Server 2016 SP2-CU6 (13.0.5292.0) ใน 4 vCPU VM กับmax degree of parallelismชุด2และชุดcost threshold for parallelism50 ในตอนเช้าเมื่อพยายามแสดงแผนการดำเนินการโดยประมาณสำหรับคิวรีแบบเลือก TOP 100ฉันพบว่าต้องรอเป็นจำนวนมากและการดำเนินการเพื่อแสดงแผนโดยประมาณใช้เวลาไม่กี่นาทีบ่อยครั้งในช่วง 5 - 7 นาที อีกครั้งนี้ไม่ได้ปฏิบัติจริงของแบบสอบถามนี้เป็นเพียงกระบวนการเพื่อแสดงแผนการดำเนินการโดยประมาณ sp_WhoIsActiveจะแสดงPAGEIOLATCH_SHรอหรือLATCH_EX [ACCESS_METHODS_DATASET_PARENT]รอและเมื่อฉันเรียกใช้สคริปต์WaitingTasks.sql ของ Paul Randalในระหว่างการดำเนินการก็จะแสดงการCXPACKETรอด้วยเธรดผู้ทำงานที่แสดงการPAGEIOLATCH_SHรอ: * ฟิลด์คำอธิบายทรัพยากร = exchangeEvent id=Port5f6069e600 WaitType=e_waitPortOpen waiterType=Coordinator nodeId=1 tid=0 ownerActivity=notYetOpened waiterActivity=waitForAllOwnersToOpen เธรดผู้ปฏิบัติงานดูเหมือนจะนำstatsตารางทั้งหมดมาไว้ในหน่วยความจำ (เช่นหมายเลขหน้าเหล่านั้นรวมถึงหมายเลขหน้าถัดไปที่แสดงจากแบบสอบถามของ Paul Randal กลับไปยังคีย์คลัสเตอร์สำหรับstatsตาราง) เมื่อแผนกลับมามันเป็นช่วงเวลาที่เหลือของวันทันทีหลังจากที่ฉันเห็นการstatsขัดสีส่วนใหญ่ของตารางจากแคชที่มีเพียงระเบียนต่าง ๆ ที่เหลืออยู่เท่านั้น …

2
ปัญหาการประมาณค่าเชิง Cardinality ของการเข้าร่วมวงใน
ฉันพยายามเข้าใจว่าทำไมการประมาณแถวจึงผิดอย่างยิ่งนี่คือกรณีของฉัน: เข้าร่วมง่าย - โดยใช้ SQL Server 2016 sp2 (ปัญหาเดียวกันใน sp1), dbcompatiblity = 130 select Amount_TransactionCurrency_id, CurrencyShareds.id from CurrencyShareds INNER JOIN annexes ON Amount_TransactionCurrency_id = CurrencyShareds.Id option (QUERYTRACEON 3604, QUERYTRACEON 2363); SQL ประมาณ 1 แถวโดยที่ 107131 และเลือกวนซ้ำซ้อนกัน ( ลิงก์ไปยังแผน ) หลังจากอัปเดตสถิติใน CurrencyShared แล้วการประมาณการก็ใช้ได้และการเลือกผสานเข้าร่วม ( ลิงก์ไปยังแผนใหม่ ) ทันทีที่มีการเพิ่มเพียงหนึ่งระเบียนใน CurrencyShareds สถิติก็จะกลายเป็น "เก่า" และ …

2
DBP FREEPROCCACHE และ DBCC FREESYSTEMCACHE ('แผนการ SQL') ไม่ทำอะไรเลยเพื่อเพิ่มหน่วยความจำ CACHESTORE_SQLCP ฟรี
CACHESTORE_SQLCP Sql Plans ใช้เวลา> 38 GB หลังจากสองสามวัน เรากำลังใช้งานตัวเลือก "เพิ่มประสิทธิภาพสำหรับภาระงาน Ad hoc" (Entity Framework และการรายงานที่กำหนดเองสร้างโฆษณาจำนวนมาก!) SQL Server 2016 SE 3.00.2164.0.v1 บน AWS RDS พร้อมการจำลองแบบหลาย AZ เมื่อฉันวิ่ง: DBCC FREESYSTEMCACHE('SQL Plans'); หรือ DBCC FREEPROCCACHE หรือ DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL หรือ DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL; ดูเหมือนจะไม่ชัดเจนว่า: SELECT TOP 1 type, name, …

1
พฤติกรรมที่ไม่ถูกต้องของ SQL Server 2016 ด้วยตารางที่ปรับให้เหมาะสมหน่วยความจำ
โปรดดูแบบสอบถาม SQL ต่อไปนี้: CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE ( source_col INT NULL, target_col INT not NULL INDEX ix_InMemoryTable NONCLUSTERED (target_col) ) WITH (MEMORY_OPTIMIZED = ON) GO DECLARE @t dbo.IN_MEMORY_TABLE_TYPE INSERT @t ( source_col, target_col ) VALUES (10, 0), (0, 0) UPDATE r1 SET target_col = -1 FROM @t r1 WHERE …

3
เอาชนะข้อจำกัดความยาวอักขระ LIKE
โดยการอ่านข้อจำกัดความยาวของตัวละคร LIKEที่นี่ดูเหมือนว่าฉันไม่สามารถส่งข้อความที่ยาวเกิน ~ 4000 ตัวอักษรในประโยค LIKE ฉันพยายามดึงแผนแบบสอบถามจากแคชแผนแบบสอบถามสำหรับแบบสอบถามเฉพาะ SELECT * FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st where st.text like '%MY_QUERY_LONGER_THAN_4000_CHARS%' ESCAPE '?' หากแบบสอบถามภายในLIKEตัวอักษรยาวเกิน 4,000 ตัวอักษรฉันจะได้ผลลัพธ์ 0 ถึงแม้ว่าแบบสอบถามของฉันจะอยู่ในแผนแคช (ฉันคาดหวังอย่างน้อย erorr) มีวิธีแก้ไขปัญหานี้หรือจะทำแตกต่างกันอย่างไร ผมมีข้อสงสัยซึ่งสามารถ> ตัวอักษรที่ยาวนานและมีลักษณะเหมือนที่ฉันไม่สามารถหาพวกเขาด้วย10000LIKE

2
เหตุใดการวางกุญแจต่างประเทศจึงใช้เวลานาน?
ฉันได้สร้างสคริปต์ที่หนึ่งครั้งลบกุญแจต่างประเทศทั้งหมดจากฐานข้อมูลเช่นนี้: ALTER TABLE MyTable1 DROP CONSTRAINT FK_MyTable1_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col1 ALTER TABLE MyTable2 DROP CONSTRAINT FK_MyTable2_col2 สิ่งที่ทำให้ฉันประหลาดใจคือสคริปต์ใช้เวลานาน: โดยเฉลี่ย 20 วินาทีสำหรับแต่ละ DROP FK ตอนนี้ฉันเข้าใจว่าการสร้าง FK อาจเป็นเรื่องใหญ่เพราะเซิร์ฟเวอร์ต้องดำเนินการและตรวจสอบว่าข้อ จำกัด FK ไม่ได้ถูกละเมิดตั้งแต่เริ่มแรก แต่เป็นการลดลงใช่ไหม เซิร์ฟเวอร์ทำอะไรเมื่อปล่อย FKs ที่ใช้เวลานาน นี่เป็นทั้งความอยากรู้อยากเห็นของฉันเองและเพื่อให้เข้าใจว่ามีวิธีที่จะทำให้สิ่งต่าง ๆ เร็วขึ้นหรือไม่ ความสามารถในการลบ FK (ไม่ใช่แค่ปิดการใช้งาน) จะช่วยให้ฉันเร็วขึ้นมากในระหว่างการย้ายข้อมูลและลดเวลาหยุดทำงาน

2
ทางเลือกในการ MakeValid () สำหรับข้อมูลเชิงพื้นที่ใน SQL Server 2016
ฉันมีตารางLINESTRINGข้อมูลทางภูมิศาสตร์จำนวนมากที่ฉันย้ายจาก Oracle ไปยัง SQL Server มีการประเมินจำนวนหนึ่งที่ดำเนินการกับข้อมูลนี้ใน Oracle และพวกเขาจะต้องดำเนินการกับข้อมูลใน SQL Server ด้วย ปัญหา: SQL Server มีข้อกำหนดที่เข้มงวดยิ่งขึ้นสำหรับการใช้ที่ถูกต้องLINESTRINGกว่า Oracle; "อินสแตนซ์ LineString ไม่สามารถทับซ้อนกันในช่วงเวลาสองจุดหรือมากกว่าติดต่อกัน" มันก็เกิดขึ้นที่เปอร์เซ็นต์ของเราLINESTRINGไม่เป็นไปตามเกณฑ์นั้นซึ่งหมายความว่าฟังก์ชั่นที่เราต้องประเมินข้อมูลล้มเหลว ฉันต้องการปรับข้อมูลเพื่อให้สามารถตรวจสอบความถูกต้องได้สำเร็จใน SQL Server ตัวอย่างเช่น: ตรวจสอบง่ายมากLINESTRINGที่กลับมาที่ตัวเอง: select geography::STGeomFromText( 'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).IsValidDetailed() 24413: Not valid because of two overlapping edges in curve (1). การดำเนินการกับMakeValidฟังก์ชัน: select …

1
การเปลี่ยนแปลงค่าประมาณของเพรดิเคตที่มี SUBSTRING () ใน SQL Server 2016 หรือไม่
มีเอกสารหรืองานวิจัยใดเกี่ยวกับการเปลี่ยนแปลงใน SQL Server 2016 ถึงความคาดการณ์ของ cardinality สำหรับเพรดิเคตที่มี SUBSTRING () หรือฟังก์ชันสตริงอื่น ๆ หรือไม่? เหตุผลที่ฉันถามคือฉันกำลังดูคิวรีที่ประสิทธิภาพลดลงในโหมดความเข้ากันได้ 130 และสาเหตุที่เกี่ยวข้องกับการเปลี่ยนแปลงในการประมาณจำนวนแถวที่ตรงกับส่วนคำสั่ง WHERE ที่มีการเรียกไปยัง SUBSTRING () ฉันแก้ไขปัญหาด้วยการเขียนแบบสอบถามใหม่ แต่สงสัยว่าถ้าใครรู้เรื่องเอกสารเกี่ยวกับการเปลี่ยนแปลงในพื้นที่นี้ใน SQL Server 2016 รหัสการสาธิตอยู่ด้านล่าง ค่าประมาณใกล้เคียงกันมากในกรณีทดสอบนี้ แต่ความแม่นยำนั้นขึ้นอยู่กับข้อมูล ในกรณีทดสอบในระดับที่เข้ากันได้ 120, SQL Server ดูเหมือนจะใช้ฮิสโตแกรมสำหรับการประมาณการในขณะที่ในระดับที่เข้ากันได้ 130 SQL Server ดูเหมือนจะสมมติว่า 10% คงที่ของตารางที่ตรงกัน CREATE DATABASE MyStringTestDB; GO USE MyStringTestDB; GO DROP TABLE IF EXISTS dbo.StringTest; …

1
NONCLUSTERED INDEX ที่ยังไม่ได้ใช้ยังสามารถเพิ่มความเร็วการสืบค้นได้หรือไม่?
นี่เป็นสถานการณ์ที่แปลก แต่ฉันหวังว่าบางคนจะมีคำตอบ ในบางช่วงการแก้ไขปัญหาประสิทธิภาพการทำงานของเราได้เพิ่ม nonclustered INDEX sp_BlitzIndexในตารางตามที่ได้รับการร้องขอจาก เราตรวจสอบการใช้งานในวันถัดไปและพบว่ามีการอ่าน0 ครั้ง (การสแกน 0 ครั้ง / การค้นหาการค้นหาเดี่ยว 0 ครั้ง ) ดังนั้นเราจึงปิดการใช้งาน ในนาทีถัดไปเราได้รับการร้องเรียนเกี่ยวกับแอพพลิเคชั่นช้า (ปัญหาประสิทธิภาพ) ที่เราพยายามตรวจสอบและแก้ไขในตอนแรกเมื่อเราเพิ่ม INDEX ทีนี้ฉันรู้แล้วในทางทฤษฎีฟังดูเป็นเรื่องบังเอิญอย่างแท้จริง ดัชนีถูกสรรพสิ่ง, วัด, ที่ไม่ได้ใช้ ปิดการใช้งานไม่ควรทำให้ประสิทธิภาพการทำงานของแบบสอบถามลดลง แต่มันเกือบจะบังเอิญเกินไป คำถาม ดังนั้นคำถามของฉันก็เพียงพอแล้ว: มันเป็นไปได้ทุกที่ , ว่า nonclustered INDEX ซึ่งมีการใช้งานสถิติ (จาก DMVs / การsp_BlitzIndex) แสดงการใช้งาน NO ยังคงได้รับการช่วยให้ประสิทธิภาพการค้นหาบนโต๊ะอย่างใดได้รับผลกระทบหรือไม่

6
ระบบปฏิบัติการส่งคืนข้อผิดพลาด 21 (อุปกรณ์ไม่พร้อม)
ทุกครั้งที่ฉันรีบูท Windows สำหรับฐานข้อมูลบางอย่างฉันจะได้รับข้อผิดพลาดนี้: ระบบปฏิบัติการส่งคืนข้อผิดพลาด 21 (อุปกรณ์ไม่พร้อม) ฉันตรวจสอบดิสก์ด้วยchkdsk /r- ไม่มีเซกเตอร์เสีย ฉันดำเนินการDBCC CHECKDBโดยไม่มีข้อผิดพลาด: *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* ถ้าฉันรีสตาร์ท SQL Server ข้อผิดพลาดจะหายไป Windows 10 และ SQL Server 2016 Express

1
SQL Extended Events Session สำหรับการตรวจจับการชะงักงัน
มีวิธีในการเพิ่มขนาดของ<inputbuf>องค์ประกอบในการหยุดชะงัก XML ที่บันทึกโดยเซสชันเหตุการณ์ที่เพิ่มขึ้นของการหยุดชะงักหรือไม่? เราต้องการดูแบบสอบถามที่สมบูรณ์เพื่อช่วยระบุปัญหาในรหัสแอปพลิเคชัน ดูเหมือนว่าจะถูก จำกัด ที่ 1024 อักขระ +/- จะเพิ่มขึ้นได้ไหม ดูตัวอย่าง XML ด้านล่าง คุณจะเห็นว่าข้อความค้นหาใน<inputbuf>องค์ประกอบนั้นถูกตัดกลางรายการที่เลือก: <deadlock> <victim-list> <victimProcess id="processc9c0829848" /> </victim-list> <process-list> <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" …

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