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

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

2
เหตุใด DELETE จึงมีผลกระทบต่อประสิทธิภาพอย่างมาก
ในตอนท้ายคือสคริปต์ทดสอบสำหรับเปรียบเทียบประสิทธิภาพระหว่างตัวแปร @table และตาราง #temp ฉันคิดว่าฉันตั้งค่าไว้อย่างถูกต้อง - การกำหนดเวลาการทำงานนั้นเกิดขึ้นนอกคำสั่ง DELETE / TRUNCATE ผลลัพธ์ที่ฉันได้รับมีดังนี้ (คูณเป็นมิลลิวินาที) @Table Variable #Temp (delete) #Temp (truncate) --------------- -------------- ---------------- 5723 5180 5506 15636 14746 7800 14506 14300 5583 14030 15460 5386 16706 16186 5360 เพียงเพื่อให้แน่ใจว่าฉันมีสติสิ่งนี้แสดงให้เห็นว่า CURRENT_TIMESTAMP (aka GetDate()) ถูกนำมาใช้ในเวลาของคำสั่งไม่ใช่ของแบตช์ดังนั้นจึงไม่มีการโต้ตอบระหว่าง TRUNCATE / DELETE กับSET @StartTime = CURRENT_TIMESTAMPคำสั่ง select current_timestamp …

2
แบบสอบถาม T-SQL โดยใช้แผนแตกต่างกันอย่างสมบูรณ์ขึ้นอยู่กับจำนวนแถวที่ฉันกำลังอัปเดต
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันมีคำสั่ง SQL UPDATE พร้อมประโยค "TOP (X)" และแถวที่ฉันอัปเดตค่ามีประมาณ 4 พันล้านแถว เมื่อฉันใช้ "TOP (10)" ฉันจะได้รับแผนการดำเนินการหนึ่งแผนซึ่งจะดำเนินการเกือบจะทันที แต่เมื่อฉันใช้ "TOP (50)" หรือใหญ่กว่าแบบสอบถามจะไม่เสร็จสิ้น (อย่างน้อยไม่ใช่ในขณะที่ฉันรอ) มันใช้แผนการดำเนินการที่แตกต่างอย่างสิ้นเชิง เคียวรีขนาดเล็กใช้แผนอย่างง่ายมากที่มีคู่ของการค้นหาดัชนีและการเข้าร่วมลูปที่ซ้อนกันซึ่งแบบสอบถามเดียวกันที่แน่นอน (มีจำนวนแถวที่แตกต่างกันในส่วนคำสั่งย่อยด้านบนของคำสั่ง UPDATE) ใช้แผนที่เกี่ยวข้องกับการค้นหาดัชนีสองรายการ สปูลของตารางการขนานและความซับซ้อนอื่น ๆ ฉันใช้ "OPTION (ใช้แผน ... )" เพื่อบังคับให้ใช้แผนการดำเนินการที่สร้างโดยเคียวรีขนาดเล็ก - เมื่อฉันทำสิ่งนี้ฉันสามารถอัปเดตได้มากถึง 100,000 แถวในไม่กี่วินาที ฉันรู้ว่าแผนการสืบค้นเป็นสิ่งที่ดี แต่ SQL Server …

2
การรวบรวม SQL ส่งผลกระทบต่อประสิทธิภาพการทำงานของ SQL Server อย่างไร
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันสร้างอินสแตนซ์ของ SQL Server 2005 และฉันผ่านการSQLServer:SQL Statistics - SQL Compilations/secวัดของ PerfMon ฉันเห็นว่าค่าเฉลี่ยประมาณ 170 หรือมากกว่านั้น ฉันเปิดตัว SQL Profiler และค้นหา SP: Compile หรือ SQL: Compile events เห็นได้ชัดว่าพวกเขาไม่อยู่ ฉันค้นหาStored Procedure/SP:RecompileและTSQL/SQL:StmtRecompileจัดกิจกรรม จำนวนข้อมูลที่ฉันเห็นใน Profiler แสดงให้เห็นว่าสิ่งเหล่านี้เป็นเหตุการณ์ที่ไม่ถูกต้องที่ต้องดูแม้ว่าฉันจะไม่แน่ใจ ดังนั้นคำถามของฉัน คำตอบสำหรับสิ่งเหล่านี้จะดีมาก ฉันจะดูสิ่งที่รวบรวมใน SQL Server ได้อย่างไร ฉันเลือกการวัดที่ไม่ถูกต้องเพื่อดูหรือไม่ ทั้งใน Perfmon หรือ …

3
คอลัมน์บิตของ SQL Server ใช้เนื้อที่ทั้งไบต์จริง ๆ หรือไม่
ฉันแหย่ไปรอบ ๆ SSMS และสังเกตว่า "ขนาด" ของINTคอลัมน์ของฉันคือ 4 ไบต์ (คาดว่า) แต่ฉันก็ตกใจเล็กน้อยเมื่อเห็นว่าBITคอลัมน์ของฉันเป็นไบต์ทั้งหมด ฉันเข้าใจผิดหรือเปล่าว่ากำลังดูอะไรอยู่?

2
กู้คืนฐานข้อมูลไม่รวมข้อมูล FILESTREAM
บริบท เรากำลังพัฒนาระบบที่มีฐานข้อมูลขนาดใหญ่ที่ด้านล่าง มันเป็นฐานข้อมูล MS SQL ที่ทำงานบน SQL Server 2008 R2 ขนาดทั้งหมดของฐานข้อมูลประมาณ 12 GB จากนี้ประมาณ 8.5 GB BinaryContentอยู่ในตารางเดียว ดังที่ชื่อแนะนำนี่คือตารางที่เราเก็บไฟล์อย่างง่ายทุกชนิดไว้ในตารางโดยตรงในฐานะ BLOB เมื่อเร็ว ๆ นี้เราได้ทดสอบความเป็นไปได้ในการย้ายไฟล์เหล่านี้ออกจากฐานข้อมูลไปยังระบบไฟล์โดยใช้ FILESTREAM เราทำการแก้ไขที่จำเป็นในฐานข้อมูลของเราโดยไม่มีปัญหาใด ๆ และระบบของเรายังคงทำงานได้ดีหลังจากการย้ายข้อมูล BinaryContentตารางมีลักษณะประมาณนี้: CREATE TABLE [dbo].[BinaryContent]( [BinaryContentID] [int] IDENTITY(1,1) NOT NULL, [FileName] [varchar](50) NOT NULL, [BinaryContentRowGUID] [uniqueidentifier] ROWGUIDCOL NOT NULL ) ON [PRIMARY] FILESTREAM_ON [FileStreamContentFG] ALTER …

1
อะไรคือกายวิภาคของดัชนีคอลัมน์
หนึ่งในคุณสมบัติใหม่ในชื่อรหัส SQL Server 2012 Denaliคือดัชนี Columnstore ฉันรู้ดีเกี่ยวกับดัชนีการจัดเก็บแถวเก่าทั่วไปเช่นโครงสร้าง b-tree ความแตกต่างในการจัดเก็บระหว่างระดับลีฟและเพจ b-tree ผลกระทบของฟิลด์ที่รวมไว้การปรับให้เหมาะสมเพื่อใช้งานลำดับของคีย์เป็นต้น ฉันมีปัญหาในการรับข้อมูลที่ดีเกี่ยวกับinternalsของดัชนี columnstore มันเป็นโครงสร้างอย่างไร มีต้นไม้ b หรือไม่? มีโครงสร้างอื่น ๆ ในสถานที่? มีการจัดระเบียบข้อมูลอย่างไร ตัวดำเนินการเฉพาะประเภทใดที่เหมาะสมที่สุดที่จะใช้ มีรูปแบบการต่อต้านแบบอื่นที่ควรหลีกเลี่ยงเมื่อใช้งาน? สิ่งที่ฉันสามารถค้นหาเกี่ยวกับพวกเขานั้นเป็นสิ่งที่ตรงกันข้ามกับดัชนี "ปกติ" คือไม่มีการเรียงลำดับของคีย์ไม่มีเขตข้อมูลที่รวมไม่รวมอยู่เท่านั้น ข้อมูลเชิงลึกใด ๆ ที่ชื่นชม

2
ทำไม IDENTITY_INSERT ON อนุญาตให้ทำได้ครั้งละหนึ่งตารางเท่านั้น
เป็นกรณีที่IDENTITY_INSERTสามารถตั้งค่าเป็น ON ในตารางฐานข้อมูลครั้งละหนึ่งตารางเท่านั้น แต่เพราะเหตุใด เนื่องจากIDENTITYคอลัมน์นั้นไม่เหมือนกันในระดับโลกฉันจึงไม่สามารถนึกถึงสถานการณ์อันตรายใด ๆ ที่อาจเกิดจากการแทรกข้อมูลระบุตัวตนลงในตารางมากกว่าหนึ่งตารางในเวลาเดียวกัน IDENTITY INSERT ไม่ควรนำมาใช้ แต่เหตุผลสำหรับขีด จำกัด ยากคืออะไร
20 sql-server 

4
ทำไม NULL จึงถูกเรียงลำดับก่อน
ทำไมเมื่อเรามีค่า NULL ในคอลัมน์และเราเรียงตามค่าจากน้อยไปมาก NULL จะถูกเรียงลำดับก่อน select 1 as test union all select 2 union all select NULL union all select 3 union all select 4 order by test ผลลัพธ์ใน NULL 1 2 3 4 ฉันคิดว่า NULL หมายถึง "ไม่ทราบแน่ชัด" หรือเป็นไปได้ "ไม่ทราบ" หากเป็นจริงพวกเขาจะไม่เรียงลำดับล่าสุดเนื่องจากค่าอาจมากกว่าค่าอื่น ๆ ทั้งหมดหรือไม่ (หรือนี่เป็นตัวเลือกการจัดเรียงที่อื่น) ฉันใช้ SQL Server 2008R2 แต่ฉันสงสัยว่านี่เป็นความจริงในทุกเซิร์ฟเวอร์ SQL …

1
เมื่อใดควรใช้เหตุการณ์เพิ่มเติมแทน SQL Profiler / perfmon
เหตุการณ์เพิ่มเติมดูเหมือนว่าเทคโนโลยีที่ดีกว่าและความเครียดน้อยลงบนเซิร์ฟเวอร์ แต่ตัวสร้างโปรไฟล์ SQL / perfmon มีเครื่องมือที่ดีกว่า นอกจากนี้เหตุการณ์ที่ยืดออกดูเหมือนจะมีช่วงการเรียนรู้ที่ชันกว่า ควรใช้แต่ละบริบทในลักษณะใด มันคุ้มหรือไม่ที่จะผ่านโค้งการเรียนรู้ที่สูงชันเพื่อใช้ประโยชน์จากเหตุการณ์ที่ขยายออกไป

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

1
วิธีรับแถว MAX
ใน SQL Server ฉันพบว่ามันเป็นความเจ็บปวดที่จะได้รับแถวสูงสุดสำหรับชุดข้อมูลฉันกำลังมองหารายการของวิธีการดึงแถวสูงสุดด้วยคำแนะนำเกี่ยวกับประสิทธิภาพและการบำรุงรักษา ตารางตัวอย่าง: DECLARE @Test TABLE (ID INT IDENTITY(1,1), name VARCHAR(50), dateOfBirth DATETIME, TaxNumber varchar(10)) INSERT INTO @Test (name, dateOfBirth, TaxNumber) SELECT 'Fred', convert(datetime, '25/01/1976', 103), '123' UNION ALL SELECT 'Bob', convert(datetime, '03/03/1976', 103), '234' UNION ALL SELECT 'Jane', convert(datetime, '13/06/1996', 103), '345' UNION ALL SELECT 'Fred', convert(datetime, …
20 sql-server 

2
สร้างบันทึกการทำธุรกรรมขึ้นใหม่
เรามีฐานข้อมูลขนาดใหญ่มาก (~ 6TB) ซึ่งไฟล์บันทึกธุรกรรมถูกลบ (ในขณะที่ SQL Server ปิดตัวลงเราได้ลอง: การถอดและติดตั้งฐานข้อมูลอีกครั้ง และ การยกเลิกการลบไฟล์บันทึกธุรกรรม ... แต่ยังไม่มีอะไรทำงาน เรากำลังทำงานอยู่: ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>') ... แต่ด้วยขนาดของฐานข้อมูลอาจใช้เวลาสองสามวันจึงจะเสร็จสมบูรณ์ คำถาม มีความแตกต่างระหว่างคำสั่งด้านบนและคำสั่งต่อไปนี้หรือไม่? DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS) เราควรจะดำเนินการREPAIR_ALLOW_DATA_LOSSแทนหรือไม่ เป็นที่น่าสังเกตว่าข้อมูลนั้นมาจากแหล่งอื่น ๆ เพื่อให้สามารถสร้างฐานข้อมูลใหม่ได้อย่างไรก็ตามเราสงสัยว่าจะซ่อมแซมฐานข้อมูลได้เร็วกว่าการแทรกข้อมูลทั้งหมดอีกครั้ง ปรับปรุง สำหรับคะแนนการรักษาเหล่านั้น: ALTER DATABASE/REBUILD LOGคำสั่งเสร็จสิ้นหลังจากประมาณ 36 ชั่วโมงและรายงาน: คำเตือน: บันทึกสำหรับฐานข้อมูล 'dbname' ได้ถูกสร้างขึ้นใหม่ ความสอดคล้องของธุรกรรมสูญหายไป สายโซ่ RESTORE ใช้งานไม่ได้และเซิร์ฟเวอร์ไม่มีบริบทในไฟล์บันทึกก่อนหน้านี้อีกต่อไปดังนั้นคุณจะต้องรู้ว่าไฟล์เหล่านั้นคืออะไร คุณควรรัน DBCC …

5
แบบสอบถามที่ดีที่สุดที่จะใช้เพื่อตรวจสอบสถานะของฐานข้อมูล SQL Server คืออะไร
ฉันต้องการที่จะเรียกใช้แบบสอบถามเพื่อรับข้อมูลที่สำคัญเกี่ยวกับสถานะของฐานข้อมูล เช่นฉันต้องการให้แบบสอบถามสามารถบอกได้ว่าฐานข้อมูลอยู่ในสภาพดีหรือไม่ นี่คือแบบสอบถามที่ฉันสืบทอดมาสำหรับการตรวจสอบนี้: SELECT name AS [SuspectDB], DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect], DATABASEPROPERTY(name, N'IsOffline') AS [Offline], DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency], has_dbaccess(name) AS [HasDBAccess] FROM sysdatabases WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1) OR (DATABASEPROPERTY(name, N'IsOffline') = 1) OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1) OR (has_dbaccess(name) = 0) หากเคียวรีนั้นส่งคืนผลลัพธ์ใด ๆ ข้อสันนิษฐานที่กำลังทำอยู่คือฐานข้อมูลอยู่ในสถานะสงสัยหรืออาจไม่ดี มีวิธีที่ดีกว่าในการทำเช่นนี้?

5
การใช้ IF ใน T-SQL จะทำให้แผนการดำเนินการแคชอ่อนลงหรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา มีการแนะนำให้ฉันว่าการใช้คำสั่ง IF ใน t-SQL batches นั้นเป็นอันตรายต่อประสิทธิภาพ ฉันพยายามค้นหาคำยืนยันหรือตรวจสอบยืนยันนี้ ฉันใช้ SQL Server 2005 และ 2008 การยืนยันคือชุดที่มีดังต่อไปนี้: - IF @parameter = 0 BEGIN SELECT ... something END ELSE BEGIN SELECT ... something else END SQL Server ไม่สามารถใช้แผนการดำเนินการที่สร้างขึ้นใหม่ได้เนื่องจากการดำเนินการครั้งต่อไปอาจต้องใช้สาขาอื่น นี่หมายความว่า SQL Server จะกำจัดหนึ่งสาขาทั้งหมดจากแผนการดำเนินการตามพื้นฐานของการดำเนินการปัจจุบันซึ่งสามารถกำหนดสาขาที่ต้องการได้แล้ว นี่เป็นเรื่องจริงหรือ …

1
วิธีการเปลี่ยน schema ของกระบวนงานที่เก็บไว้โดยไม่สร้างขึ้นใหม่
ฉันมีขั้นตอนการจัดเก็บบางส่วนที่มีสคีมา "SalesTraining" ฉันต้องการเปลี่ยน schemas SalesTraining ทั้งหมดเป็น "Sales" มีวิธีใดที่ดีไปกว่าการสร้างขั้นตอนการจัดเก็บใหม่ ขอบคุณ
20 sql-server 

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