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

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

5
วิธีหาช่องว่างซ้ำ ๆ เมื่อ 90 วันที่ผ่านไประหว่างแถว
นี่เป็นงานที่ไม่สำคัญใน C # โฮมเวิร์ลดของฉัน แต่ฉันยังไม่ได้ทำใน SQL และต้องการที่จะแก้ปัญหาการตั้งค่า (โดยไม่มีเคอร์เซอร์) ชุดผลลัพธ์ควรมาจากข้อความค้นหาเช่นนี้ SELECT SomeId, MyDate, dbo.udfLastHitRecursive(param1, param2, MyDate) as 'Qualifying' FROM T มันควรจะทำงานอย่างไร ฉันส่ง params ทั้งสามนี้ไปยัง UDF UDF ใช้ params ภายในเพื่อดึงข้อมูลแถว <= 90 วันที่เก่ากว่าที่เกี่ยวข้องจากมุมมอง UDF สำรวจ 'MyDate' และส่งคืน 1 ถ้าควรรวมอยู่ในการคำนวณทั้งหมด หากไม่ควรส่งคืนค่า 0 จะถูกตั้งชื่อเป็น "คุณสมบัติ" สิ่งที่ udf จะทำ แสดงรายการแถวตามลำดับวันที่ คำนวณวันระหว่างแถว แถวแรกในชุดผลลัพธ์เป็น Hit = 1 …

1
SELECT TOP 1 จากตารางที่มีขนาดใหญ่มากในคอลัมน์ดัชนีนั้นช้ามาก แต่ไม่ใช่ด้วยลำดับย้อนกลับ (“ desc”)
เรามีฐานข้อมูลขนาดใหญ่ประมาณ 1TB ใช้ SQL Server 2014 บนเซิร์ฟเวอร์ที่ทรงพลัง ทุกอย่างทำงานได้ดีไม่กี่ปี ประมาณ 2 สัปดาห์ที่ผ่านมาเราทำการบำรุงรักษาอย่างสมบูรณ์ซึ่งรวมถึง: ติดตั้งอัปเดตซอฟต์แวร์ทั้งหมด สร้างดัชนีและไฟล์ฐานข้อมูลขนาดกะทัดรัดทั้งหมด อย่างไรก็ตามเราไม่ได้คาดหวังว่าในบางช่วงการใช้งาน CPU ของ DB จะเพิ่มขึ้นมากกว่า 100% เป็น 150% เมื่อการโหลดจริงเหมือนกัน หลังจากการแก้ไขปัญหาจำนวนมากเราได้ จำกัด ให้แคบลงเป็นคำถามที่ง่ายมาก แต่เราไม่พบวิธีแก้ปัญหา การสืบค้นนั้นง่ายมาก: select top 1 EventID from EventLog with (nolock) order by EventID ใช้เวลาประมาณ 1.5 วินาทีเสมอ! อย่างไรก็ตามเคียวรีที่คล้ายกันที่มี "desc" จะใช้เวลาประมาณ 0 ms: select top 1 EventID …

1
การรันเคียวรีขนาดใหญ่บนฐานข้อมูลรองในกลุ่มความพร้อมใช้งานจะส่งผลต่อประสิทธิภาพของธุรกรรมในฐานข้อมูลหลักหรือไม่
ฉันต้องการให้ข้อมูลตามเวลาจริงหรือเกือบตามเวลาจริงสำหรับการรายงาน SSRS และ Tableau ฉันไม่ต้องการให้ระบบ OLTP ที่ใช้ในการผลิตได้รับผลกระทบทางลบจากการสืบค้นที่ใช้เวลานาน การรันเคียวรีขนาดใหญ่บนฐานข้อมูลรองในกลุ่มความพร้อมใช้งานจะส่งผลต่อประสิทธิภาพของธุรกรรมในฐานข้อมูลหลักหรือไม่

2
จะเกิดอะไรขึ้นเมื่อไม่มีหน่วยความจำกายภาพเหลืออยู่สำหรับ SQL Server
ในขณะที่ Google กำลังค้นหาข้อมูลที่ขัดแย้งกัน บางเว็บไซต์ระบุว่าเมื่อไม่มีหน่วยความจำกายภาพเหลืออยู่สำหรับข้อมูล SQL Server จะย้ายข้อมูลที่มีอยู่แล้วลงใน TEMPDB (ดู: SQL Server: Demystifying TempDb และคำแนะนำ ) แต่เว็บไซต์อื่น ๆ ระบุว่าเมื่อมีหน่วยความจำกายภาพเหลืออยู่ไม่เพียงพอระบบปฏิบัติการสามารถใช้ PAGE FILE และย้ายข้อมูลจากหน่วยความจำกายภาพไปยังมัน (ดูหน้าไฟล์สำหรับ SQL Server ) ฉันสงสัยว่า SQL Server เขียนข้อมูลเมื่อใดหน่วยความจำกายภาพหมด? หากต้องการ tempdb หรือไปยังไฟล์หน้า OS? หรืออาจจะทั้งคู่?

2
เป็นเรื่องถูกกฎหมายหรือไม่ที่ SQL Server เติมคอลัมน์ PERSISTED ด้วยข้อมูลที่ไม่ตรงกับคำจำกัดความ
ฉันกำลังติดตามคำถามนี้เกี่ยวกับค่าแปลก ๆ ในPERSISTEDคอลัมน์ที่คำนวณ คำตอบนั้นทำให้เดาไม่กี่เกี่ยวกับพฤติกรรมนี้ ฉันถามสิ่งต่อไปนี้: นี่ไม่ใช่ข้อผิดพลาดทันทีหรือไม่ จะPERSISTEDคอลัมน์ที่เคยได้รับอนุญาตให้ทำงานในลักษณะนี้หรือไม่? DECLARE @test TABLE ( Col1 INT, Contains2 AS CASE WHEN 2 IN (Col1) THEN 1 ELSE 0 END PERSISTED) --depends on Col1 INSERT INTO @test (Col1) VALUES (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)), (ABS(CHECKSUM(NEWID()) % 5)) SELECT …

1
การเรียกใช้แพคเกจ SSIS จากงาน SQL Agent ที่เป็นเจ้าของโดยผู้ใช้โดเมนที่ไม่ใช่ sysadmin
ฉันมีแพคเกจ SSIS สองชุดที่เรียกใช้งานข้ามคืน (ผ่านทางตัวแทนของเซิร์ฟเวอร์ SQL) ซึ่งเป็นส่วนหนึ่งของการปรับใช้ SSIS ที่ใหญ่กว่าโดยไม่มีปัญหาใด ๆ ทุกอย่างใช้การรับรองความถูกต้องของ Windows และงานที่กำหนดเวลาเป็น sysadmin (ดีฉัน) และทำงานเป็นบัญชีบริการตัวแทนของเซิร์ฟเวอร์ SQL ดังนั้นข้อมูลจึงsource system ~> transit db ~> staging ~> NDSค้างคืน SSIS สองแพ็คเกจที่ฉันสนใจจัดการtransit db ~> stagingและstaging ~> NDSส่วนต่าง ๆ ตามลำดับสำหรับชุดข้อมูลเฉพาะ ผู้ใช้โดเมน (ไม่ใช่ผู้ดูแลระบบ) ทำอะไรในsource systemและผลักดันข้อมูลที่น่าสนใจเข้ามาtransit dbดังนั้นฉันต้องการวิธีที่จะดึงข้อมูลที่อัปเดตนี้ในระหว่างชั่วโมงทำงานเพื่ออัปเดตNDS: มีการตัดสินใจว่าวิธีที่ง่ายที่สุดสำหรับบุคคลนี้ในการเรียก ETL นั้นโดยคลิกปุ่มในสมุดงาน Excel ที่เปิดใช้งานแมโครซึ่งเชื่อมต่อกับ SQL Server ผ่าน ODBC (โดยใช้การพิสูจน์ตัวจริงของ Windows) …

3
วิธีการเขียนแบบสอบถามใน SQL Server เพื่อค้นหาค่าที่ใกล้ที่สุด
สมมติว่าฉันมีค่าจำนวนเต็มต่อไปนี้ในตาราง 32 11 15 123 55 54 23 43 44 44 56 23 ตกลงรายการสามารถดำเนินต่อไป; มันไม่สำคัญ ตอนนี้ฉันต้องการสืบค้นตารางนี้และฉันต้องการคืนค่าจำนวนclosest recordsหนึ่ง สมมติว่าฉันต้องการคืนการแข่งขันที่ใกล้เคียงที่สุด 10 รายการให้กับตัวเลข 32ฉันสามารถทำสิ่งนี้ได้อย่างมีประสิทธิภาพหรือไม่ มันอยู่ใน SQL Server 2014

2
SQL Delete สามารถใช้คำสั่งย่อยได้อย่างไร
รหัสต่อไปนี้ถูกเพิ่มโดยหนึ่งในนักพัฒนาของเราเพื่อลบระเบียนที่ซ้ำกันออกจากตาราง: DELETE SubQuery FROM ( SELECT ID ,FK1 ,FK2 ,CreatedDateTime ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber FROM Table ) AS SubQuery WHERE RowNumber > 1 เมื่อตรวจสอบรหัสฉันคิดว่ามันจะไม่ทำงานอย่างไรก็ตามการทดสอบในสภาพแวดล้อมการทดสอบของเรา (SQL 2014) แสดงให้เห็นว่ามันเป็นเช่นนั้น! SQL ทราบได้อย่างไรว่าสามารถแก้ไขคิวรีย่อยและลบระเบียนได้tableอย่างไร

2
ตารางระบบ SQL Server สามารถจัดระเบียบได้หรือไม่?
เรามีฐานข้อมูลหลายแห่งที่สร้างและวางตารางจำนวนมาก จากสิ่งที่เราสามารถบอกได้ SQL Server จะไม่ทำการบำรุงรักษาภายในใด ๆ บนตารางฐานของระบบซึ่งหมายความว่าพวกเขาสามารถแยกส่วนกันมากในช่วงเวลาและขนาด bloated สิ่งนี้ทำให้เกิดความกดดันที่ไม่จำเป็นในบัฟเฟอร์พูลและยังส่งผลเสียต่อประสิทธิภาพการทำงานเช่นการคำนวณขนาดของตารางทั้งหมดในฐานข้อมูล ไม่มีใครมีคำแนะนำสำหรับการลดการกระจายตัวของบนตารางหลักภายในเหล่านี้หรือไม่ วิธีแก้ปัญหาที่ชัดเจนวิธีหนึ่งสามารถหลีกเลี่ยงการสร้างตารางจำนวนมาก (หรือสร้างตารางชั่วคราวทั้งหมดใน tempdb) แต่สำหรับจุดประสงค์ของคำถามนี้สมมติว่าแอปพลิเคชันไม่มีความยืดหยุ่นนั้น แก้ไข: การวิจัยเพิ่มเติมแสดงคำถามที่ยังไม่ได้ตอบซึ่งมีความเกี่ยวข้องอย่างใกล้ชิดและระบุว่าการบำรุงรักษาด้วยตนเองบางรูปแบบผ่านทางALTER INDEX...REORGANIZEอาจเป็นตัวเลือก การวิจัยเบื้องต้น ข้อมูลเมตาเกี่ยวกับตารางเหล่านี้สามารถดูได้ในsys.dm_db_partition_stats: -- The system base table that contains one row for every column in the system SELECT row_count, (reserved_page_count * 8 * 1024.0) / row_count AS bytes_per_row, reserved_page_count/128. AS space_mb FROM sys.dm_db_partition_stats …

2
SQL Server รุ่นใหม่มีเสถียรภาพน้อยลงหรือไม่
สถาปนิกฐานข้อมูลของเราบอกกับลูกค้าของเราว่า SQL Server 2014 เป็นตัวเลือกที่ไม่ดีในปี 2555 เพราะขาดประสิทธิภาพและความได้เปรียบด้านเสถียรภาพที่ 2012 มี ทุกสิ่งที่ฉันได้อ่านขัดแย้งนี้ Aaron Bertrand กล่าวว่าสิ่งที่ตรงกันข้ามและเอกสารสีขาวทั้งหมดที่ฉันได้อ่านจาก MS เห็นด้วยเช่นกัน 2014 ได้รับการปรับปรุงและแก้ไขปัญหา AG บางอย่างที่ผู้คนเคยมีในปี 2012 มีข้อเสียที่สำคัญในการเลือก 2014 ในปี 2012 ที่ฉันขาดหายไปหรือไม่?

3
เหตุใดข้อความค้นหา EXISTS ของฉันจึงทำการสแกนดัชนีแทนที่จะค้นหาดัชนี
ฉันกำลังปรับปรุงการค้นหาให้ดีที่สุด สำหรับแบบสอบถามด้านล่าง SET STATISTICS IO ON; DECLARE @OrderStartDate DATETIME2 = '27 feb 2016'; DECLARE @OrderEndDate DATETIME2 = '28 feb 2016'; SELECT o.strBxOrderNo , o.sintOrderStatusID , o.sintOrderChannelID , o.sintOrderTypeID , o.sdtmOrdCreated , o.sintMarketID , o.strOrderKey , o.strOfferCode , o.strCurrencyCode , o.decBCShipFullPrice , o.decBCShipFinal , o.decBCShipTax , o.decBCTotalAmount , o.decWrittenTotalAmount , o.decBCWrittenTotalAmount …

1
SQL Server 2014 COUNT (DISTINCT x) ละเว้นเวกเตอร์ความหนาแน่นของสถิติสำหรับคอลัมน์ x
สำหรับสิ่งCOUNT(DISTINCT)ที่มีค่าแตกต่างกัน ~ 1 พันล้านครั้งฉันได้รับแผนคิวรีที่มีการรวมแฮชที่คาดว่าจะมีแถวเพียง 3 ล้านแถวเท่านั้น ทำไมสิ่งนี้จึงเกิดขึ้น SQL Server 2012 สร้างการประมาณการที่ดีดังนั้นนี่เป็นข้อบกพร่องใน SQL Server 2014 ที่ฉันควรรายงานเกี่ยวกับการเชื่อมต่อหรือไม่ แบบสอบถามและประมาณการที่ไม่ดี -- Actual rows: 1,011,719,166 -- SQL 2012 estimated rows: 1,079,130,000 (106% of actual) -- SQL 2014 estimated rows: 2,980,240 (0.29% of actual) SELECT COUNT(DISTINCT factCol5) FROM BigFactTable OPTION (RECOMPILE, QUERYTRACEON 9481) -- Include this …

1
มีหน่วยความจำระบบไม่เพียงพอในกลุ่มทรัพยากรเริ่มต้นเพื่อเรียกใช้แบบสอบถามนี้
ฉันใช้ SQL Server 2014 - 12.0.2269.0 (X64) ใน Windows Server 2012 และฉันประสบปัญหาหน่วยความจำบางอย่าง เมื่อฉันเรียกใช้กระบวนงานที่เก็บไว้ซึ่งทำการคำนวณค่อนข้าง "หนัก" ฉันได้รับข้อผิดพลาดหลังจากบางสิ่งบางอย่างเช่น 10 นาที: มีหน่วยความจำระบบไม่เพียงพอในกลุ่มทรัพยากร 'เริ่มต้น' เพื่อเรียกใช้แบบสอบถามนี้ SQL Server ของฉันมีหลายฐานข้อมูล (เช่น 15 แต่ไม่ได้ใช้พร้อมกันเสมอ) ฉันดูไฟล์บันทึกของ SQL Server (หลังจากฉันได้รับข้อผิดพลาด) และฉันเห็นบรรทัดมากมายเช่นนี้ 2015-12-17 12: 00: 37.57 spid19s ไม่อนุญาตการจัดสรรหน้าสำหรับฐานข้อมูล 'Database_Name' เนื่องจากหน่วยความจำไม่เพียงพอในกลุ่มทรัพยากร 'เริ่มต้น' ดู ' http://go.microsoft.com/fwlink/?LinkId=330673 ' สำหรับข้อมูลเพิ่มเติม รายงานถูกสร้างขึ้นในบันทึกที่มีหน่วยความจำที่ใช้โดยแต่ละองค์ประกอบ (ฉันคิดว่า) MEMORYCLERK_SQLBUFFERPOOLถ้าฉันได้อย่างถูกต้องตีความรายงานที่เราจะเห็นว่ามีจำนวนมากของหน่วยความจำบริโภคโดย คุณสามารถค้นหารายงานได้ที่นี่: http://pastebin.com/kgmk9dPH …

4
จะค้นหา SSISDB เพื่อค้นหาข้อผิดพลาดในแพ็คเกจได้อย่างไร
ฉันเคยเห็นคำถามนี้ SSIS 2012 - วิธีการสืบค้นแพคเกจที่รันอยู่ใน T-SQL ในปัจจุบัน? มันให้สคริปต์ต่อไปนี้กับฉัน: SELECT E.execution_id , E.folder_name , E.project_name , E.package_name , E.reference_id , E.reference_type , E.environment_folder_name , E.environment_name , E.project_lsn , E.executed_as_sid , E.executed_as_name , E.use32bitruntime , E.operation_type , E.created_time , E.object_type , E.object_id , E.status , E.start_time , E.end_time , E.caller_sid , E.caller_name …

3
เชื่อมค่าทั้งหมดขององค์ประกอบ XML เดียวกันโดยใช้ XPath / XQuery
ฉันมีค่า XML ดังนี้: <R> <I>A</I> <I>B</I> <I>C</I> ... </R> ฉันต้องการที่จะเชื่อมทุกค่าและพวกเขากลับเป็นสตริงเดียว:IABC... ตอนนี้ฉันรู้แล้วว่าฉันสามารถทำลาย XML, รวมผลลัพธ์กลับเป็น XML แบบไม่มีโหนดและนำ.values('text()[1]', ...)ไปใช้กับผลลัพธ์: SELECT ( SELECT n.n.value('text()[1]', 'varchar(50)') AS [text()] FROM @MyXml.nodes('/R/I') AS n (n) FOR XML PATH (''), TYPE ).value('text()[1]', 'varchar(50)') ; อย่างไรก็ตามฉันต้องการทำทุกอย่างที่ใช้วิธี XPath / XQuery เท่านั้นสิ่งนี้: SELECT @MyXml. ? ( ? ); มีวิธีดังกล่าวหรือไม่? เหตุผลที่ฉันกำลังมองหาวิธีแก้ปัญหาในทิศทางนี้เป็นเพราะ XML …

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