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

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

3
จำลองฟังก์ชันสเกลาร์ที่ผู้ใช้กำหนดในลักษณะที่ไม่ได้ป้องกันการขนาน
ฉันพยายามดูว่ามีวิธีการหลอกลวง SQL Server ให้ใช้แผนบางอย่างสำหรับแบบสอบถามหรือไม่ 1. สภาพแวดล้อม ลองนึกภาพคุณมีข้อมูลบางอย่างที่ใช้ร่วมกันระหว่างกระบวนการที่แตกต่างกัน สมมติว่าเรามีผลการทดสอบบางอย่างซึ่งใช้พื้นที่มาก จากนั้นสำหรับแต่ละขั้นตอนเรารู้ว่าต้องการใช้ปี / เดือนใด if object_id('dbo.SharedData') is not null drop table SharedData create table dbo.SharedData ( experiment_year int, experiment_month int, rn int, calculated_number int, primary key (experiment_year, experiment_month, rn) ) go ตอนนี้สำหรับทุกกระบวนการเรามีพารามิเตอร์ที่บันทึกไว้ในตาราง if object_id('dbo.Params') is not null drop table dbo.Params create table dbo.Params …

2
ฉันสามารถ refactor แบบสอบถามนี้เพื่อให้ทำงานในแบบคู่ขนานได้หรือไม่
ฉันมีแบบสอบถามที่ใช้เวลาประมาณ 3 ชั่วโมงในการทำงานบนเซิร์ฟเวอร์ของเรา - และมันไม่ได้ใช้ประโยชน์จากการประมวลผลแบบขนาน (ประมาณ 1.15 ล้านระเบียนในdbo.Deidentified300 ระเบียนในdbo.NamesMultiWord) เซิร์ฟเวอร์มีการเข้าถึง 8 คอร์ UPDATE dbo.Deidentified WITH (TABLOCK) SET IndexedXml = dbo.ReplaceMultiWord(IndexedXml), DE461 = dbo.ReplaceMultiWord(DE461), DE87 = dbo.ReplaceMultiWord(DE87), DE15 = dbo.ReplaceMultiWord(DE15) WHERE InProcess = 1; และReplaceMultiwordเป็นกระบวนการที่กำหนดเป็น: SELECT @body = REPLACE(@body,Names,Replacement) FROM dbo.NamesMultiWord ORDER BY [WordLength] DESC RETURN @body --NVARCHAR(MAX) การเรียกร้องให้ReplaceMultiwordป้องกันการก่อตัวเป็นแผนขนานหรือไม่ มีวิธีที่จะเขียนสิ่งนี้เพื่อให้มีความเท่าเทียมกันหรือไม่? ReplaceMultiword …

2
กำหนดค่าการมอบหมายที่ไม่ จำกัด สำหรับ BULK INSERT
ฉันมีโหนด Microsoft SQL Server 2016 คู่หนึ่งในกลุ่ม Always On Availability ฉันกำลังพยายามดำเนินการBULK INSERT(โดยใช้แบบสอบถาม SQL Server 2016 Management Studio) ในไฟล์ที่อยู่ในคลัสเตอร์เซิร์ฟเวอร์ล้มเหลวของ Windows Server 2016 แต่ฉันได้รับข้อผิดพลาดต่อไปนี้: เกี่ยวกับข่าวสาร 4861 ระดับ 16 สถานะ 1 ไม่สามารถโหลดจำนวนมากได้เนื่องจากไม่สามารถเปิดไฟล์ "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt" รหัสข้อผิดพลาดของระบบปฏิบัติการ 5 (ปฏิเสธการเข้าถึง) สิ่งนี้จะเกิดขึ้นโดยไม่คำนึงว่าฉันใช้ชื่อโหนดที่ใช้งาน ( nas2.my.domain) หรือฟังคลัสเตอร์ล้มเหลว ( nas.my.domain) หรือไม่ หลังจากมองไปรอบ ๆ …

1
ฟีเจอร์ Plan Query Store Force ไม่ทำงาน
คุณลักษณะแผนของ Query Store Force ไม่ได้บังคับใช้แผน ฉันรู้ร้านแบบสอบถาม - บังคับไม่ได้หมายความว่าบังคับ ; อย่างไรก็ตามแผนของฉันอาจไม่เปลี่ยนแปลงอย่างมีนัยสำคัญ แต่เครื่องมือเพิ่มประสิทธิภาพการสืบค้นอาจเลือกดัชนีที่ไม่ถูกต้องตัวเลือกการวนซ้ำเป็นต้น โดยพื้นฐาน: มันไม่เป็นไปตามแผนบังคับของฉัน ผมเคยบังคับแผนจำนวนมากและมันก็ไม่ได้ทำงาน มีอยู่ 0 sys.query_store_plan force_failure_countข้อหาล้มเหลวหรือเหตุผลคือเมื่อฉันมองไปที่ เหตุการณ์ที่ขยายquery_store_plan_forcing_failedไม่ได้ให้ผลใด ๆ 0 เหตุการณ์ ตัวอย่างเช่นแผนซึ่งบังคับใช้เมื่อ 20.09 มีเพียงการรวบรวม 1 ครั้งเท่านั้นที่ใช้แผนการบังคับ แผนแตกต่างกันอย่างมากแผนการหนึ่งที่ใช้การจับคู่แฮชเข้าร่วมกับ INDEX 1 และอีกแผนการใช้การเข้าร่วมแบบวนรอบกับ INDEX 2 รุ่น: Microsoft SQL Server 2016 (SP1-GDR) (KB3210089) - 13.0.4202.2 (X64) ฉันหายไปนี่อะไร

3
วิธีเพิ่มข้อ จำกัด เริ่มต้นขณะสร้างตาราง SQL Server [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการใน3 ปีที่ผ่านมา ฉันพยายามสร้างตารางใหม่ที่มีคอลัมน์ตามด้วยข้อ จำกัด ดังที่แสดงด้านล่าง Create tblTest( columns.. .. .. Gender int, Constraint DF_tblTest_Gender Default 3 For Gender, .. .. .. ) อย่างไรก็ตามฉันได้รับข้อความแสดงข้อผิดพลาดใกล้กับข้อ จำกัด เริ่มต้นว่า 'ใกล้ไวยากรณ์ที่ไม่ถูกต้อง' สำหรับ ''

1
เหตุใดหน้าต่างโหมดแบตช์จึงรวมการคำนวณทางคณิตศาสตร์มากเกินไป
แบบสอบถามต่อไปนี้ดำเนินการแบบหน้าต่างSUMเหนือตาราง columnstore ด้วย1500 total rowsซึ่งแต่ละอันมีค่า 0 หรือ 1 และมัน overflows INTชนิดข้อมูล ทำไมสิ่งนี้จึงเกิดขึ้น SELECT a, p, s, v, m, n, SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END) OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition FROM ( SELECT a, p, s, v, m, n, RANK() …

1
ทำไม NOLOCK ทำการสแกนด้วยการกำหนดตัวแปรให้ช้าลง?
ฉันต่อสู้กับ NOLOCK ในสภาพแวดล้อมปัจจุบันของฉัน อาร์กิวเมนต์หนึ่งที่ฉันได้ยินคือโอเวอร์เฮดของการล็อกทำให้การสืบค้นช้าลง ดังนั้นฉันจึงวางแผนการทดสอบเพื่อดูว่าค่าใช้จ่ายนี้จะมากแค่ไหน ฉันค้นพบว่า NOLOCK จริง ๆ แล้วการสแกนของฉันช้าลง ตอนแรกฉันดีใจ แต่ตอนนี้ฉันสับสน การทดสอบของฉันไม่ถูกต้องอย่างใด? NOLOCK ไม่ควรอนุญาตให้สแกนเร็วขึ้นเล็กน้อยจริง ๆ หรือ เกิดอะไรขึ้นที่นี่ นี่คือสคริปต์ของฉัน: USE TestDB GO --Create a five-million row table DROP TABLE IF EXISTS dbo.JustAnotherTable GO CREATE TABLE dbo.JustAnotherTable ( ID INT IDENTITY PRIMARY KEY, notID CHAR(5) NOT NULL ) INSERT dbo.JustAnotherTable SELECT …

4
SQL Server ล้มเหลวในการใช้ดัชนีใน bijection ง่าย
นี่เป็นปริศนาเพิ่มประสิทธิภาพการสืบค้นอีกอันหนึ่ง บางทีฉันแค่ประมาณเครื่องมือเพิ่มประสิทธิภาพข้อความค้นหาหรือบางทีฉันอาจพลาดบางสิ่ง - ดังนั้นฉันจึงวางมันไว้ที่นั่น ฉันมีโต๊ะธรรมดา CREATE TABLE [dbo].[MyEntities]( [Id] [uniqueidentifier] NOT NULL, [Number] [int] NOT NULL, CONSTRAINT [PK_dbo.MyEntities] PRIMARY KEY CLUSTERED ([Id]) ) CREATE NONCLUSTERED INDEX [IX_Number] ON [dbo].[MyEntities] ([Number]) ด้วยดัชนีและแถวบางแถวในนั้นมีNumberการกระจายอย่างเท่าเทียมกันในค่า 0, 1 และ 2 ตอนนี้แบบสอบถามนี้: SELECT * FROM (SELECT [Extent1].[Number] AS [Number], CASE WHEN (0 = [Extent1].[Number]) THEN 'one' …

1
ตรรกะอ่านบนโต๊ะ temp ทั่วโลก แต่ไม่ได้อยู่ในตาราง temp ระดับเซสชั่น
พิจารณา MCVE แบบง่าย ๆ ต่อไปนี้: SET STATISTICS IO, TIME OFF; USE tempdb; IF OBJECT_ID(N'tempdb..#t1', N'U') IS NOT NULL DROP TABLE #t1; CREATE TABLE #t1 ( r int NOT NULL ); IF OBJECT_ID(N'tempdb..##t1', N'U') IS NOT NULL DROP TABLE ##t1; CREATE TABLE ##t1 ( r int NOT NULL ); IF OBJECT_ID(N'dbo.s1', …

1
การเปรียบเทียบประสิทธิภาพระหว่างการใช้ฟังก์ชั่นเข้าร่วมและหน้าต่างเพื่อรับค่านำและระยะเวลาล่าช้า
ผมมีตารางที่มีแถว 20M และแต่ละแถวมี 3 คอลัมน์: time, และid valueสำหรับแต่ละidและtimeมีvalueสถานะ ฉันต้องการทราบว่านำและล่าช้าค่าของบางอย่างสำหรับการที่เฉพาะเจาะจงtimeid ฉันใช้สองวิธีเพื่อให้ได้สิ่งนี้ วิธีการหนึ่งคือการใช้เข้าร่วมและอีกวิธีหนึ่งคือการใช้ฟังก์ชั่นหน้าต่างนำ / ล่าช้ากับดัชนีคลัสเตอร์บนและtimeid ฉันเปรียบเทียบประสิทธิภาพของสองวิธีนี้ตามเวลาดำเนินการ วิธีการเข้าร่วมใช้เวลา 16.3 วินาทีและวิธีฟังก์ชั่นหน้าต่างใช้เวลา 20 วินาทีโดยไม่รวมเวลาในการสร้างดัชนี สิ่งนี้ทำให้ฉันประหลาดใจเพราะฟังก์ชั่นหน้าต่างดูเหมือนจะก้าวหน้าในขณะที่วิธีการเข้าร่วมนั้นดุร้าย นี่คือรหัสสำหรับสองวิธี: สร้างดัชนี create clustered index id_time on tab1 (id,time) เข้าร่วมวิธีการ select a1.id,a1.time a1.value as value, b1.value as value_lag, c1.value as value_lead into tab2 from tab1 a1 left join tab1 b1 …

1
การใช้กระบวนการไม่ถูกต้องจากเหตุการณ์ที่เพิ่มความสมบูรณ์ของระบบหรือไม่
ฉันเพิ่งทำงานเกี่ยวกับการทำความเข้าใจข้อมูลหรือตัวชี้วัดที่ถูกเก็บไว้ในไฟล์เหตุการณ์ขยายระบบสุขภาพ เรากำลังพยายามใช้การรวบรวมข้อมูลของตัวชี้วัดประสิทธิภาพโดยใช้ความสมบูรณ์ของระบบตามที่ระบุไว้ที่นี่ มีรายงานที่ให้ตัวชี้วัดเช่นการใช้ CPU, การใช้งานกระบวนการอื่น ๆ ที่รวบรวมจากเหตุการณ์สถานะระบบ scheduler_monitor_system_health_ring_buffer_recorded ฉันไม่สามารถเข้าใจเซิร์ฟเวอร์ไม่กี่แห่งของฉันได้เพราะเหตุใดฟิลด์ "process_utilization" ซึ่งแสดงอยู่ในรายงานเนื่องจากการใช้งาน CPU CPU นั้นใช้เวลาส่วนใหญ่มากกว่า 100 เวลาสูงสุดในช่วงเวลาสูงสุดจะแตกต่างกันระหว่าง 120-160 และเพราะรายงานนั้น แสดง CPU ที่สูงกว่า 100 เสมอแม้ว่าฉันจะตรวจสอบจากเซิร์ฟเวอร์กิจกรรมการตรวจสอบที่ไม่เคยกรณี ฉันได้หยิบยกปัญหานี้ขึ้นใน Github แต่ดูเหมือนไม่มีการแก้ไขหรือตอบสนอง ดังนั้นคำถามของฉันจะเป็น ฉันจะได้รับหมายเลขที่ถูกต้องสำหรับการใช้งาน CPU CPU สำหรับเซิร์ฟเวอร์ของฉันโดยใช้บัฟเฟอร์เสียงเรียกทำงานระบบได้อย่างไร? รายงานยังแสดงตัวนับสำหรับเขตข้อมูลด้านล่าง 2 คำนวณจากรายงานของพวกเขา 100-System_idle-process_utilization เป็น OtherProcessUtil 100-system_idle เป็น SystemUtil OtherProcessUtilและSystemUtilเหล่านี้มีความจำเป็น / มีประโยชน์สำหรับอะไร? ฉันยังเห็นการใช้หน่วยความจำทุกครั้งที่แสดงเป็น 100 ซึ่งดูไม่ถูกต้องเช่นกัน มีใครสังเกตเห็นไหม เครื่องมืออื่น ๆ เช่น …

1
SHRINKFILE Failure - ทำไมการเพิ่มขนาดไฟล์จึงแก้ไขได้?
ฉันใช้SHRINKFILEการดำเนินการบางอย่างเพื่อทำความสะอาดไฟล์เล็ก ๆ ที่ไม่จำเป็นในกลุ่มไฟล์ สำหรับการย่อขนาดหนึ่งคำสั่งด้านล่างส่งผลให้เกิดข้อผิดพลาด: DBCC SHRINKFILE (N'myfile' , EMPTYFILE)' ID ไฟล์ x ของ ID ฐานข้อมูล x ไม่สามารถย่อขนาดได้เนื่องจากเป็นกระบวนการที่ถูกย่อโดยกระบวนการอื่นหรือว่างเปล่า มันไม่ได้ว่างเปล่าหรือหดตัว มันกำลังถูกรันบนฐานข้อมูลที่ไม่ได้ใช้งานโดยทุกคนยกเว้นตัวฉันเอง ไม่ได้เปิดใช้งานการย่อขนาดอัตโนมัติและไม่เคยเป็น แต่มีอยู่ shrinks คู่มือการดำเนินการเกี่ยวกับฐานข้อมูลนี้เป็นประจำก่อนที่จะฉันได้รับในมือของฉันที่มันถ้าเรื่องที่ทุก บนSQLServerCentralเธรดจากทศวรรษที่ผ่านมาแนะนำการเพิ่ม MB ไม่กี่ MB ลงในแฟ้มได้เนื่องจาก "ตั้งค่าตัวนับภายในหรือสวิตช์ภายในที่บอกว่ามันไม่ได้อยู่ในช่วงหดตัวในขณะนี้" สิ่งนี้ใช้ได้ - ยอดเยี่ยม แต่ทุกคนสามารถอธิบายรายละเอียดที่มากขึ้นว่า / ทำไมมันถึงเกี่ยวกับ SQL Server internals?

1
อัลกอริทึมที่อยู่เบื้องหลังผู้ประกอบการยกเว้นคืออะไร?
อัลกอริทึมภายในของวิธีการที่ตัวดำเนินการยกเว้นทำงานภายใต้การครอบคลุมใน SQL Server คืออะไร ภายในใช้แฮชของแต่ละแถวและเปรียบเทียบหรือไม่ David Lozinksi ได้ทำการศึกษาSQL: วิธีที่เร็วที่สุดในการแทรกบันทึกใหม่ที่ไม่มีอยู่จริงเขาแสดงให้เห็นว่าคำสั่งนั้นเร็วที่สุดสำหรับแถวจำนวนมาก อย่างใกล้ชิดกับผลลัพธ์ของเราด้านล่าง ข้อสันนิษฐาน: ฉันคิดว่าการเข้าร่วมด้านซ้ายจะเร็วที่สุดเนื่องจากจะเปรียบเทียบเพียง 1 คอลัมน์เท่านั้นยกเว้นจะใช้เวลานานที่สุดเนื่องจากต้องเปรียบเทียบคอลัมน์ทั้งหมด ด้วยผลลัพธ์เหล่านี้ตอนนี้ความคิดของเราคือยกเว้นโดยอัตโนมัติและใช้แฮชของแต่ละแถวภายในหรือไม่ ฉันดูยกเว้นแผนการดำเนินการและใช้แฮชบางอย่าง ความเป็นมา: ทีมของเราเปรียบเทียบตารางฮีปสองโต๊ะ ตาราง A แถวที่ไม่ได้อยู่ในตาราง B ถูกแทรกเข้าไปในตาราง B ตารางฮีป (จากระบบไฟล์ข้อความดั้งเดิม) ไม่มีคีย์ / guids / identifier หลัก บางตารางมีแถวที่ซ้ำกันดังนั้นเราจึงพบแฮชของแต่ละแถวและลบรายการที่ซ้ำกันออกและสร้างตัวระบุคีย์หลัก 1) อันดับแรกเราเรียกใช้คำสั่งยกเว้นยกเว้น (คอลัมน์แฮช) select * from TableA Except Select * from TableB, 2) จากนั้นเราก็วิ่งซ้ายเข้าร่วมเปรียบเทียบระหว่างสองตารางใน HashRowId select * …

2
ไม่สิ้นสุดการค้นหาใน Query Store
ฉันจะบอกตั้งแต่ต้นว่าคำถาม / ปัญหาของฉันมีลักษณะคล้ายกับนี้ก่อนหน้านี้หนึ่ง แต่เนื่องจากผมไม่แน่ใจว่าถ้าสาเหตุหรือข้อมูลเริ่มต้นเหมือนกันฉันตัดสินใจที่จะโพสต์คำถามของฉันที่มีรายละเอียดบางอย่างมากขึ้น ปัญหาในมือ: ในเวลาไม่กี่ชั่วโมง (ใกล้ถึงสิ้นวันทำการ) ตัวอย่างการผลิตจะเริ่มทำงานผิดปกติ: CPU สูงสำหรับอินสแตนซ์ (จากพื้นฐานประมาณ 30% มันจะเพิ่มขึ้นเป็นสองเท่าและยังคงเติบโตอยู่) เพิ่มจำนวนธุรกรรม / วินาที (แม้ว่าการโหลดแอปจะไม่เห็นการเปลี่ยนแปลงใด ๆ ) เพิ่มจำนวนเซสชันว่าง เหตุการณ์การบล็อกแปลก ๆ ระหว่างเซสชันที่ไม่เคยแสดงพฤติกรรมนี้ (แม้จะอ่านเซสชันที่ไม่มีข้อผูกมัดก็ทำให้เกิดการบล็อก) การรอช่วงบนสุดเป็นช่วงที่ไม่ใช่การสลักหน้าในอันดับที่ 1 โดยมีการล็อกตำแหน่งที่ 2 การตรวจสอบเบื้องต้น: การใช้ sp_whoIsActive เราเห็นว่าการสืบค้นที่ดำเนินการโดยเครื่องมือตรวจสอบของเราตัดสินใจที่จะทำงานช้ามากและจับ CPU จำนวนมากสิ่งที่ไม่เคยเกิดขึ้นมาก่อน ระดับการแยกของมันถูกอ่านปราศจากข้อผูกมัด เราดูแผนที่เราเห็นตัวเลขที่แปลกประหลาด: StatementEstRows = "3.86846e + 010" โดยมีข้อมูลประมาณ 150 TB เพื่อส่งคืน เราสงสัยว่าคุณลักษณะการตรวจสอบข้อความค้นหาของเครื่องมือตรวจสอบนั้นเป็นสาเหตุดังนั้นเราจึงปิดการใช้งานคุณลักษณะนี้ (เราได้เปิดตั๋วกับผู้ให้บริการของเราเพื่อตรวจสอบว่าพวกเขาตระหนักถึงปัญหาใด ๆ หรือไม่) จากเหตุการณ์แรกนั้นมันเกิดขึ้นอีกสองสามครั้งทุกครั้งที่เราฆ่าเซสชันทุกอย่างกลับสู่ปกติ …

2
ทุกชุดทำให้เกิดการคอมไพล์
เรามีแอปพลิเคชันบุคคลที่สามที่ส่งคำสั่ง T-SQL เป็นชุด ฐานข้อมูลโฮสต์อยู่ใน SQL Server 2016 Enterprise SP1 CU7, 16 คอร์และหน่วยความจำ 256GB เปิดใช้งานการปรับให้เหมาะสมที่สุดสำหรับ Ad-Hoc นี่เป็นตัวอย่างของการสอบถามที่กำลังดำเนินการ: exec sp_executesql N' IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT select field1, field2 from table1 where field1=@1 option(keep plan, keepfixed, loop join) select field3, field4 from table2 where field3=@1 option(keep plan, keepfixed, …

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