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

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

5
เป็นวิธีที่เร็วที่สุดในการแปลง ints 1: 1 เป็นเลขฐานสองแบบ null ได้คืออะไร?
ส่วนหนึ่งของภาระงานของฉันใช้ฟังก์ชั่น CLR ที่ใช้อัลกอริทึมแฮชที่น่ากลัวเพื่อเปรียบเทียบแถวเพื่อดูว่ามีการเปลี่ยนแปลงค่าคอลัมน์ใด ๆ หรือไม่ ฟังก์ชั่น CLR รับสตริงไบนารีเป็นอินพุตดังนั้นฉันต้องการวิธีที่รวดเร็วในการแปลงแถวเป็นสตริงไบนารี ฉันคาดว่าจะแฮชประมาณ 10 พันล้านแถวในระหว่างการทำงานเต็มรูปแบบดังนั้นฉันต้องการรหัสนี้ให้เร็วที่สุด ฉันมีตารางประมาณ 300 ตารางที่มีสกีมาแตกต่างกัน สำหรับจุดประสงค์ของคำถามนี้โปรดสมมติโครงสร้างตารางอย่างง่ายที่มีค่าเป็น 32 INTคอลัมน์ ฉันได้ให้ข้อมูลตัวอย่างรวมถึงวิธีการเปรียบเทียบผลลัพธ์ที่ด้านล่างของคำถามนี้ แถวต้องถูกแปลงเป็นสตริงไบนารีเดียวกันหากค่าคอลัมน์ทั้งหมดเหมือนกัน แถวต้องถูกแปลงเป็นสตริงไบนารีที่แตกต่างกันหากค่าคอลัมน์ใด ๆ แตกต่างกัน ตัวอย่างเช่นรหัสง่าย ๆ ดังต่อไปนี้จะไม่ทำงาน: CAST(COL1 AS BINARY(4)) + CAST(COL2 AS BINARY(4)) + .. มันไม่จัดการ NULL อย่างถูกต้อง ถ้าCOL1เป็น NULL สำหรับแถวที่ 1 และCOL2เป็น NULL สำหรับแถวที่ 2 ดังนั้นทั้งสองแถวจะถูกแปลงเป็นสตริง NULL ฉันเชื่อว่าการจัดการ NULL ที่ถูกต้องเป็นส่วนที่ยากที่สุดในการแปลงทั้งแถวอย่างถูกต้อง …

1
ไม่สามารถแทรกแถวคีย์ซ้ำในดัชนีที่ไม่ซ้ำกันใช่ไหม
เราพบข้อผิดพลาดแปลก ๆ สามครั้งในช่วงสองสามวันที่ผ่านมาหลังจากปราศจากข้อผิดพลาดเป็นเวลา 8 สัปดาห์และฉันก็นิ่งงัน นี่คือข้อความแสดงข้อผิดพลาด: Executing the query "EXEC dbo.MergeTransactions" failed with the following error: "Cannot insert duplicate key row in object 'sales.Transactions' with unique index 'NCI_Transactions_ClientID_TransactionDate'. The duplicate key value is (1001, 2018-12-14 19:16:29.00, 304050920).". ดัชนีที่เรามีไม่ซ้ำกัน หากคุณสังเกตเห็นค่าคีย์ที่ซ้ำกันในข้อความแสดงข้อผิดพลาดจะไม่ตรงกับดัชนี สิ่งที่แปลกคือถ้าฉันเรียกใช้ proc อีกครั้งมันก็ประสบความสำเร็จ นี่คือลิงค์ล่าสุดที่ฉันพบว่ามีปัญหาของฉัน แต่ฉันไม่เห็นวิธีแก้ปัญหา https://www.sqlservercentral.com/forums/topic/error-cannot-insert-duplicate-key-row-in-a-non-unique-index สองสามสิ่งเกี่ยวกับสถานการณ์ของฉัน: Proc กำลังอัปเดต TransactionID (ส่วนหนึ่งของคีย์หลัก) …

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

1
ทำไม RX-X lock นี้ไม่ปรากฏใน Extended Events?
ปัญหา ฉันมีคู่ของคำสั่งที่ทำให้เกิดการล็อค RX-X อย่างไรก็ตามเมื่อฉันใช้ Extended Events เพื่อดูการได้มาของการล็อคการได้รับ RX-X lock ไม่เคยปรากฏขึ้นมันจะออกมาเท่านั้น มันมาจากไหน? Repro นี่คือตารางของฉัน: CREATE TABLE dbo.LockTest ( ID int identity, Junk char(4) ) CREATE CLUSTERED INDEX CX_LockTest --not unique! ON dbo.LockTest(ID) --preload some rows INSERT dbo.LockTest VALUES ('data'),('data'),('data') นี่คือชุดปัญหาของฉัน: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRAN INSERT dbo.LockTest VALUES ('bleh') …

1
การตรวจสอบทางกายภาพเท่านั้นล้มเหลว แต่เต็มไปด้วยความสำเร็จ
ฉันกำลังดำเนินการ checkdb พร้อมตัวเลือก physical_only และล้มเหลวโดยมีข้อผิดพลาดหลายอย่างเช่นด้านล่าง: ข่าวสารเกี่ยวกับ 8965 ระดับ 16 สถานะ 1 บรรทัด 1 ข้อผิดพลาดของตาราง: ID วัตถุ 1557580587, ดัชนี ID 1, ID พาร์ติชัน 72057594088456192, ID หน่วยจัดสรร 72057594177454080 (พิมพ์ข้อมูลในแถว) โหนดข้อมูลแบบปิดแถวที่หน้า (1: 13282192), ช่อง 3, ข้อความ ID 6370769698816 ถูกอ้างอิงโดยหน้า (0: 0), ช่อง 0 แต่ไม่เห็นในการสแกน ข่าวสารเกี่ยวกับ 8965 ระดับ 16 สถานะ 1 บรรทัด 1 ข้อผิดพลาดของตาราง: …

2
มีวิธีที่มีประสิทธิภาพในการดูสาเหตุของ "ข้อมูลสตริงหรือไบนารีจะถูกตัดทอน" หรือไม่?
นี่คือการติดตามคำถามนี้ นอกจากนี้ยังเกี่ยวข้องกับคำขอคุณลักษณะนี้จาก Microsoft อย่างไรก็ตามผ่านไปหลายปีแล้วและมีข่าวสำคัญ ๆ ออกสู่ตลาดนับตั้งแต่มีการรายงาน คำถาม: SQL Server 2017 มีกลไกใดบ้างที่ช่วยให้ค้นหาสาเหตุที่แท้จริงของข้อผิดพลาดนี้ได้หรือไม่? หรือยากที่จะตรวจสอบเหมือนเมื่อประมาณ 9 ปีที่แล้วเมื่อมีการรายงานปัญหา

1
การบีบอัดข้อมูลสำรองทำให้เกิดความเสียหายในฐานข้อมูล TDE SQL 2017
บน SQL Server 2017 (CU3) เมื่อใดก็ตามที่ฉันเปิดใช้งานการบีบอัดข้อมูลสำรองในหนึ่งในฐานข้อมูล TDE ของฉันกระบวนการสำรองข้อมูลจะทำให้หน้าเว็บที่ระบุในฐานข้อมูลเสียหาย ถ้าฉันเรียกใช้การสำรองข้อมูลโดยไม่มีการบีบอัดจะไม่ได้รับความเสียหาย นี่คือขั้นตอนที่ฉันได้ดำเนินการเพื่อตรวจสอบและทำให้เกิดปัญหานี้อีกครั้ง: รัน DBCC CheckDB บนฐานข้อมูล "TDE_DB1"; ทุกอย่างดีไม่มีข้อผิดพลาด สำรองฐานข้อมูลได้สำเร็จโดยไม่ต้องบีบอัด RESTORE VERIFYONLY กล่าวว่าทุกอย่างดี กู้คืนฐานข้อมูลเป็น "TDE_DB2" ได้สำเร็จ; ทั้งหมดเป็นสิ่งที่ดี DBCC CheckDB ไม่แสดงข้อผิดพลาด; สำรองฐานข้อมูล "TDE_DB1" สำเร็จด้วยการบีบอัด กู้คืนข้อผิดพลาดยืนยันว่า "ตรวจพบความเสียหายต่อชุดข้อมูลสำรอง"; พยายามกู้คืนฐานข้อมูลเป็น "TDE_DB2"; ข้อผิดพลาดการพูดว่า "RESTORE ตรวจพบข้อผิดพลาดในหน้า (1: 92454) ในฐานข้อมูล" ทำซ้ำขั้นตอนที่ 1-3; ทั้งหมดเป็นสิ่งที่ดี; DROP "TDE_DB1" และ "TDE_DB2"; กู้คืน "TDE_DB1" จากการสำรองข้อมูล …

1
เกิดข้อผิดพลาดในการเริ่มบริการ SQL Server 2017 รหัสข้อผิดพลาด 3417
ฉันติดตั้ง SQL Server 2017 บนคอมพิวเตอร์ของฉันแล้ว นี่คือสิ่งที่SELECT @@VERSIONส่งคืน: Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) 21 กรกฎาคม 2561, 07:47:45 ลิขสิทธิ์ (C) 2017 Microsoft Corporation รุ่นองค์กร (64 บิต) บน Windows 10 Enterprise 10.0 (รุ่น 17134: ) ` มันทำงานได้ดีจนกระทั่งเมื่อวาน ทันใดนั้นSQL SERVER Serviceไม่ได้ทำงาน 3417 errorเมื่อผมอยากจะเรียกใช้บริการด้วยตนเองมันแสดงให้เห็น เมื่อฉันตรวจสอบบันทึกเหตุการณ์ฉันเห็นข้อผิดพลาดนี้: การอัปเกรดระดับสคริปต์สำหรับฐานข้อมูล 'ต้นแบบ' ล้มเหลวเนื่องจากขั้นตอนการอัพเกรด 'msdb110_upgrade.sql' พบข้อผิดพลาด 200, …

4
คอลัมน์ Fast change NVARCHAR (4000) เป็น NVARCHAR (260)
ฉันมีปัญหาด้านประสิทธิภาพกับหน่วยความจำขนาดใหญ่มากที่จัดการตารางนี้ด้วยNVARCHAR(4000)คอลัมน์สองสามรายการ NVARCHAR(260)สิ่งที่เป็นคอลัมน์เหล่านี้ไม่เคยมีขนาดใหญ่กว่า การใช้ ALTER TABLE [table] ALTER COLUMN [col] NVARCHAR(260) NULL ผลใน SQL Server เขียนใหม่ทั้งตาราง (และใช้ขนาดตาราง 2x ในพื้นที่บันทึก) ซึ่งเป็นพันล้านแถวเท่านั้นที่จะเปลี่ยนแปลงอะไรไม่มีตัวเลือก การเพิ่มความกว้างของคอลัมน์ไม่มีปัญหานี้ แต่เป็นการลดลง ฉันได้ลองสร้างข้อ จำกัดCHECK (DATALENGTH([col]) <= 520)หรือCHECK (LEN([col]) <= 260)และ SQL Server ยังคงตัดสินใจที่จะเขียนตารางใหม่ทั้งหมด มีวิธีใดบ้างในการแก้ไขชนิดข้อมูลคอลัมน์เป็นการดำเนินการเฉพาะเมทาดาทา ไม่มีค่าใช้จ่ายในการเขียนใหม่ทั้งตาราง? ฉันใช้ SQL Server 2017 (14.0.2027.2 และ 14.0.3192.2) นี่คือตาราง DDL ตัวอย่างที่จะใช้ในการทำซ้ำ: CREATE TABLE [table]( id INT IDENTITY(1,1) …

3
เพิ่มคอลัมน์การเปลี่ยนแปลงความเร็วในตารางขนาดใหญ่เป็น NON NULL
ฉันเพิ่งเพิ่มคอลัมน์บิตแบบ NULL ไปยังตารางที่มีเกือบ 500 ล้านแถว ไม่มีค่าเริ่มต้นในคอลัมน์อย่างไรก็ตามส่วนแทรกทั้งหมดกำลังระบุค่าเป็น 0 หรือ 1 และฉันใช้รูทีนแบบครั้งเดียวเพื่อกำหนด 0 หรือ 1 ให้กับแถวที่มีอยู่ทั้งหมด (อัปเดตแถวเป็นชุดเล็ก ๆ ) ตอนนี้ทุกแถวควรมี 0 หรือ 1 ในคอลัมน์นั้น ฉันต้องการทำให้คอลัมน์บิตเป็นโมฆะไม่ได้ แต่เมื่อฉันพยายามทำมันผ่านALTER TABLE t1 ALTER COLUMN c1 bit not nullมันเริ่มทำงานเป็นเวลา 3 นาทีและฉันหยุดมันเพราะมันบล็อกการอ่านตารางทั้งหมดและฉันสงสัยว่ามันจะใช้เวลานานกว่าจะเสร็จสมบูรณ์ . เป็นไปได้ที่จะใช้เวลาไม่นาน แต่ฉันไม่สามารถเสี่ยงกับการขาดความพร้อมมากเกินไป การย้อนกลับใช้เวลา 6 นาที คุณมีคำแนะนำใด ๆ เกี่ยวกับวิธีที่ฉันจะทำให้คอลัมน์ไม่เป็นโมฆะโดยที่ไม่ต้องใช้เวลาหลายชั่วโมงกว่าจะเสร็จ นอกจากนี้ยังมีวิธีใดที่จะประมาณว่าALTER TABLE ALTER COLUMNคำสั่งที่ฉันเริ่มและยกเลิกจะใช้เวลานานเท่าใด ฉันใช้ SQL Server …

3
การค้นหาและการอัปเดตช้ามากหลังจากดัชนีเพิ่มประสิทธิภาพ
ฐานข้อมูล SQL Server 2017 Enterprise CU16 14.0.3076.1 เราเพิ่งพยายามเปลี่ยนจากดัชนีเริ่มต้นสร้างงานบำรุงรักษาไป Ola IndexOptimizeHallengren งานสร้างดัชนีเริ่มต้นใหม่ทำงานเป็นเวลาสองสามเดือนโดยไม่มีปัญหาใด ๆ และแบบสอบถามและการปรับปรุงกำลังทำงานด้วยเวลาดำเนินการที่ยอมรับได้ หลังจากทำงานIndexOptimizeบนฐานข้อมูล: EXECUTE dbo.IndexOptimize @Databases = 'USER_DATABASES', @FragmentationLow = NULL, @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE,INDEX_REBUILD_OFFLINE', @FragmentationLevel1 = 5, @FragmentationLevel2 = 30, @UpdateStatistics = 'ALL', @OnlyModifiedStatistics = 'Y' ประสิทธิภาพลดลงอย่างมาก คำสั่งการปรับปรุงที่ใช้เวลา 100 มิลลิวินาทีก่อนที่จะIndexOptimizeใช้เวลา 78.000ms หลังจากนั้น (โดยใช้แผนเหมือนกัน) และข้อความค้นหาก็มีประสิทธิภาพที่แย่กว่านั้นอีกหลายคำสั่ง เนื่องจากสิ่งนี้ยังคงเป็นฐานข้อมูลทดสอบ (เรากำลังย้ายระบบการผลิตจาก …

1
เหตุใดกระแสรวมนี้จึงมีความจำเป็น
ลองดูคำถามนี้ มันค่อนข้างง่าย (ดูจุดสิ้นสุดของการโพสต์สำหรับคำจำกัดความของตารางและดัชนีและสคริปต์ที่ซ้ำกัน): SELECT MAX(Revision) FROM dbo.TheOneders WHERE Id = 1 AND 1 = (SELECT 1); หมายเหตุ: "AND 1 = (SELECT 1) เพียงเพื่อป้องกันไม่ให้มีการกำหนดพารามิเตอร์อัตโนมัติซึ่งฉันรู้สึกว่าสับสนปัญหา - จริง ๆ แล้วได้รับแผนเดียวกันโดยมีหรือไม่มีประโยคนั้นแม้ว่า และนี่คือแผน ( วางลิงก์แผน) : เนื่องจากมี "อันดับ 1" อยู่ที่นั่นฉันรู้สึกประหลาดใจที่เห็นผู้ดำเนินการรวมสตรีม ไม่จำเป็นสำหรับฉันเนื่องจากมีการรับประกันว่าจะมีแถวเดียวเท่านั้น เพื่อทดสอบทฤษฎีนั้นฉันลองใช้เคียวรีที่มีเหตุผลเชิงตรรกะนี้: SELECT MAX(Revision) FROM dbo.TheOneders WHERE Id = 1 GROUP BY Id; นี่คือแผนสำหรับแผนนั้น ( …

1
ฉันจะลบ SQL Server 2017 ทั้งหมดบน Ubuntu ได้อย่างไร
เอกสารมีคำแนะนำเกี่ยวกับวิธีการลบ SQL Server อย่างไรก็ตามสิ่งนี้ทำให้บางแพ็กเกจอยู่ด้านหลัง ฉันจะลบการติดตามทั้งหมดและถอนการติดตั้ง SQL Server 2017 ได้อย่างไร

2
เหตุใดแบบสอบถาม DELETE จึงทำงานในรูปแบบหนึ่งนานกว่าอีกรูปแบบหนึ่ง
ฉันมีรหัสการล้างข้อมูลเฉพาะที่พยายามลบรายการที่ซ้ำบางรายการ สิ่งนี้ทำงานได้อย่างสมบูรณ์บนเว็บไซต์ของลูกค้าจำนวนมาก บันทึกบอกฉันว่าแบบสอบถามนี้ใช้อย่างน้อย 1 วินาทีสูงสุด 45 วินาที: DELETE FROM [tbl] WHERE [Id] NOT IN ( SELECT MIN([Id]) FROM [tbl] GROUP BY [IdProject], [IdRepresentative], [TimeStart] ) แต่ฉันมีลูกค้าที่แบบสอบถามนี้ทำงานนานกว่า 4 ชั่วโมง (ถึงตอนนี้และไม่สิ้นสุด)! ฉันตรวจสอบ DB ( DBCC CHECKDB) ฉันอัปเดตสถิติ ( sp_updatestats) แล้วและยังUPDATE STATISTICS [tbl] WITH FULLSCANไม่แสดงการเปลี่ยนแปลงอีกด้วย ฉันมีการสำรองข้อมูลดั้งเดิมของฐานข้อมูลจากลูกค้า ฉันเรียกใช้บน SQL Server 14.0.2002.14 ฉันมี Standard Edition …

2
ทำไมฉันถึงได้รับการแปลงโดยนัยของ Int / Smallint เป็น Varchar และมันส่งผลกระทบต่อการประเมิน Cardinality จริง ๆ หรือไม่
ฉันกำลังพยายามแก้ไขปัญหาแบบสอบถามที่ทำงานช้าโดยใช้ Show Plan Analysis (SSMS) บนแผนปฏิบัติการจริง เครื่องมือวิเคราะห์ชี้ให้เห็นว่าการประมาณการจำนวนแถวนั้นไม่ได้ผลการค้นหาที่ส่งคืนในบางสถานที่ในแผนและให้คำเตือนการแปลงโดยนัยเพิ่มเติม ฉันไม่เข้าใจการแปลงโดยนัยเหล่านี้ของ int ไปเป็น Varchar- เขตข้อมูลที่อ้างถึงไม่ได้เป็นส่วนหนึ่งของพารามิเตอร์ / ตัวกรองใด ๆ ในแบบสอบถามและในตารางทั้งหมดที่เกี่ยวข้องกับชนิดข้อมูลคอลัมน์จะเหมือนกัน: ฉันได้รับคำเตือนจาก Cardinality ด้านล่าง: การแปลงประเภทในนิพจน์ (CONVERT_IMPLICIT (varchar (12), [ccd]. [profileid], 0)) อาจส่งผลต่อ "CardinalityEstimate" ในตัวเลือกแผนแบบสอบถาม - ฟิลด์นี้เป็นจำนวนเต็มทุกที่ในฐานข้อมูลของฉัน การแปลงประเภทในนิพจน์ (CONVERT_IMPLICIT (varchar (6), [ccd]. [nodeid], 0)) อาจส่งผลต่อ "CardinalityEstimate" ในตัวเลือกแผนแบบสอบถาม - ฟิลด์นี้มีขนาดเล็กทุกที่ใน DB ของฉัน การแปลงประเภทในการแสดงออก (CONVERT_IMPLICIT (varchar (6), [ccd]. …

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