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

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

2
เน้นการเรียงที่ละเอียดอ่อน
ทำไมทั้งสองSELECTคำสั่งจึงส่งผลให้เรียงลำดับที่แตกต่างกัน USE tempdb; CREATE TABLE dbo.OddSort ( id INT IDENTITY(1,1) PRIMARY KEY , col1 NVARCHAR(2) , col2 NVARCHAR(2) ); GO INSERT dbo.OddSort (col1, col2) VALUES (N'e', N'eA') , (N'é', N'éB') , (N'ë', N'ëC') , (N'è', N'èD') , (N'ê', N'êE') , (N'ē', N'ēF'); GO SELECT * FROM dbo.OddSort ORDER BY col1 …

2
มีบทลงโทษสำหรับการใช้ BINARY (16) แทนที่จะเป็น UNIQUEIDENTIFIER หรือไม่?
ฉันเพิ่งได้รับมรดกฐานข้อมูล SQL Server ที่ใช้BINARY(16)แทนUNIQUEIDENTIFIERการจัดเก็บ Guids มันทำสิ่งนี้สำหรับทุกสิ่งรวมถึงกุญแจหลัก ฉันควรจะกังวลหรือไม่

2
LOB_DATA สแกนตารางช้าและคำถาม I / O บางข้อ
ฉันมีตารางที่ค่อนข้างใหญ่โดยหนึ่งในคอลัมน์เป็นข้อมูล XML และขนาดเฉลี่ยของรายการ XML อยู่ที่ประมาณ 15 กิโลไบต์ คอลัมน์อื่น ๆ ทั้งหมดเป็น ints ปกติ bigints GUIDs ฯลฯ หากต้องการมีตัวเลขที่เป็นรูปธรรมสมมติว่าตารางมีหนึ่งล้านแถวและมีขนาดประมาณ 15 GB สิ่งที่ฉันสังเกตคือตารางนี้ช้ามากในการเลือกข้อมูลจากถ้าฉันต้องการเลือกคอลัมน์ทั้งหมด เมื่อฉันทำ SELECT TOP 1000 * FROM TABLE ใช้เวลาประมาณ 20-25 วินาทีในการอ่านข้อมูลจากดิสก์ - แม้ว่าฉันจะไม่ได้กำหนดผลลัพธ์ไว้ก็ตาม ฉันเรียกใช้แบบสอบถามด้วยแคชเย็น (เช่นหลังจากDBCC DROPCLEANBUFFERS) นี่คือผลสถิติ IO: จำนวนการสแกน 1, อ่านโลจิคัล 364, อ่านฟิสิคัล 24 อ่านล่วงหน้าอ่าน 7191, ล็อบโลจิคัลอ่าน 7924, lob ฟิสิคัลอ่าน 1690, lob …

2
มีวิธีที่ยอดเยี่ยมในการอัปเดต CU สำหรับ SQL Server บนเครื่องหลายร้อยเครื่องหรือไม่?
บริษัท ของฉันเติบโตจากเซิร์ฟเวอร์ SQL 50 เครื่องไปเป็นเวลากว่า 200 คืนในการควบรวมกิจการ ช่วยด้วย! คำถามของฉันคือ: ฉันจะทำการอัปเดต CU บนเซิร์ฟเวอร์จำนวนมากนี้ได้อย่างไรและยังมีชีวิตและรักษาความมีสติอยู่ SCCM ดูเหมือนจะไม่สามารถทำการอัปเดต CU มีใครอีกบ้างที่สามารถทำการอัปเดต CU บนเซิร์ฟเวอร์ 100s ได้หรือไม่ อะไรคือทางเลือกอื่น ๆ

4
ดัชนีในคอลัมน์ข้อมูลควรจะไม่เป็นแบบคลัสเตอร์หรือไม่?
สำหรับตารางที่มีคอลัมน์ข้อมูลประจำตัวควรสร้างดัชนี PK / ไม่ซ้ำกันแบบคลัสเตอร์หรือไม่เป็นคลัสเตอร์สำหรับคอลัมน์ข้อมูลประจำตัวหรือไม่ เหตุผลคือดัชนีอื่น ๆ จะถูกสร้างขึ้นสำหรับการค้นหา แบบสอบถามที่ใช้ดัชนี nonclustered (บนฮีป) และส่งกลับคอลัมน์ที่ไม่ครอบคลุมโดยดัชนีจะใช้ตรรกะ I / O (LIO) น้อยลงเนื่องจากไม่มีดัชนี b-tree ที่ทำคลัสเตอร์พิเศษค้นหาขั้นตอน? create table T ( Id int identity(1,1) primary key, -- clustered or non-clustered? (surrogate key, may be used to join another table) A .... -- A, B, C have mixed data type …

8
แบบสอบถามที่แสดงผู้ใช้ที่แมปทั้งหมดสำหรับการเข้าสู่ระบบที่กำหนด
เมื่อดูคุณสมบัติของการเข้าสู่ระบบโดยเฉพาะเป็นไปได้ที่จะเห็นรายการผู้ใช้ที่แมปเข้าสู่การเข้าสู่ระบบนั้น: ฉันทำโปรไฟล์ SQL Server Management Studio (SSMS) และฉันเห็นว่า SSMS เชื่อมต่อกับฐานข้อมูลทุกรายการทีละรายการและดึงข้อมูลจาก sys.database_permissions เป็นไปได้ไหมที่จะเขียนเคียวรีเดี่ยวที่ดึงข้อมูลการแม็พผู้ใช้ที่แสดงด้านบนหรือฉันถูกบังคับให้ใช้เคอร์เซอร์หรือ sp_MSforeachdb หรืออะไรทำนองนั้น

3
ติดตามสถานะ 4199 - เปิดใช้งานทั่วโลกหรือไม่
สิ่งนี้อาจอยู่ภายใต้หมวดหมู่ของความเห็น แต่ฉันอยากรู้ว่าผู้คนกำลังใช้การตั้งค่าสถานะการสืบค้นกลับ 4199เป็นพารามิเตอร์เริ่มต้นสำหรับ SQL Server สำหรับผู้ที่เคยใช้มาแล้วคุณพบกับการถดถอยของแบบสอบถามภายใต้สถานการณ์ใดบ้าง ดูเหมือนว่ามันจะเป็นประโยชน์ต่อการปฏิบัติงานทั่วทั้งกระดานฉันกำลังพิจารณาที่จะเปิดใช้งานทั่วโลกในสภาพแวดล้อมที่ไม่ใช่การผลิตของเราและปล่อยให้มันนั่งสองสามเดือนเพื่อแก้ไขปัญหา การแก้ไขใน 4199 มีการสะสมในเครื่องมือเพิ่มประสิทธิภาพโดยปริยายในปี 2014 (หรือ 2016) หรือไม่? แม้ว่าฉันจะเข้าใจกรณีที่ไม่แนะนำการเปลี่ยนแปลงแผนโดยไม่คาดคิด แต่ก็แปลกที่จะซ่อนการแก้ไขทั้งหมดนี้ไว้ระหว่างรุ่น เรากำลังใช้ 2008, 2008R2 และส่วนใหญ่ 2012

3
ฉันจะวัดประสิทธิภาพของแบบสอบถามได้ดีที่สุดได้อย่างไร
ฉันมี 2 โพรซีเดอร์ที่เก็บซึ่งโพรซีเดอร์ที่เก็บที่สองคือการปรับปรุงของโพรซีเดอร์แรก ฉันพยายามวัดว่าการปรับปรุงนั้นดีเพียงใด 1 / การวัดclock timeไม่ได้เป็นตัวเลือกเนื่องจากฉันได้รับเวลาในการดำเนินการที่แตกต่างกัน ยิ่งแย่ลงบางครั้ง (ไม่ค่อยเกิดขึ้น แต่เกิดขึ้น) เวลาดำเนินการของโพรซีเดอร์ที่เก็บไว้สองครั้งนั้นใหญ่กว่าเวลาดำเนินการของโพรซีเดอร์แรก (ฉันเดาว่าเนื่องจากเวิร์กโหลดเซิร์ฟเวอร์ในขณะนั้น) 2 / Include client statisticsยังให้ผลลัพธ์ที่แตกต่าง 3 / DBCC DROPCLEANBUFFERS, DBCC FREEPROCCACHEเป็นสิ่งที่ดี แต่เป็นเรื่องเดียวกัน ... 4 / SET STATISTICS IO ONอาจเป็นตัวเลือก แต่ฉันจะได้คะแนนโดยรวมได้อย่างไรเนื่องจากฉันมีตารางจำนวนมากที่เกี่ยวข้องกับขั้นตอนการจัดเก็บของฉัน 5 / Include actual execution planอาจเป็นตัวเลือกด้วย ฉันได้รับestimated subtreecost0.3253 สำหรับขั้นตอนการจัดเก็บครั้งแรกและ 0.3079 สำหรับขั้นตอนที่สอง ฉันสามารถพูดได้ว่าขั้นตอนการเก็บที่สองเร็วขึ้น 6% (= 0.3253 / 0.3079) …

1
หน้าต่างเวลากลางคืน 24x7
ฉันจะหาแหล่งข้อมูลเกี่ยวกับวิธีย้ายการปฏิบัติการ 24x7 ไปได้ดีกว่าที่ใด บริษัท ใหญ่ที่มีฐานข้อมูลขนาดใหญ่ทำสิ่งนี้ได้อย่างไร งานยามค่ำคืนของเราเช่น ล้างข้อมูลเก่า Reindex อัปเดตสถิติ ดูเหมือนว่าทั้งหมดจะก่อให้เกิดผลกระทบร้ายแรงต่อระบบของเรา ( เช่นผู้ใช้ออนไลน์และฟีดข้อมูลเรียลไทม์) ฉันได้ดูหนังสือที่เกี่ยวข้องกับเรื่องนี้ใน Amazon แล้วและยังไม่พบอะไรเลย
19 sql-server 

2
ล็อคสร้างตาราง
ในแอปพลิเคชันอื่นฉันรู้สึกประทับใจกับการออกแบบที่ไม่ดี: มีหลายเธรดที่รันEnsureDatabaseSchemaExists()เมธอดพร้อมกันซึ่งมีลักษณะดังนี้: IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN CREATE TABLE MyTable ( ... ); END อย่างไรก็ตามแม้ว่าจะดำเนินการในการทำธุรกรรม SERIALIZABLE รหัสนี้ดูเหมือนจะไม่ปลอดภัยต่อเธรด (เช่นรหัสขนานพยายามสร้างตารางหลายครั้ง) มีโอกาสที่จะบังคับให้คำสั่ง SELECT ได้รับการล็อกซึ่งป้องกันเธรดอื่นให้ทำคำสั่ง SELECT ที่เหมือนกันหรือไม่? มีรูปแบบที่ดีกว่าสำหรับวิธีการแบบมัลติเธรด -CheckSchemaExists () หรือไม่?

5
SQL Server 2012: สร้างสคริปต์จากบรรทัดคำสั่ง
ฉันใช้ SQL Server 2012 Studio การจัดการเซิร์ฟเวอร์ SQL มีตัวเลือกให้คลิกขวาบนฐานข้อมูลจากนั้นเลือกงานและสร้างสคริปต์ มีวิธีการที่ทำให้โดยอัตโนมัติผ่านทางบรรทัดคำสั่งอย่างใด? ฉันต้องการสร้างสคริปต์ที่มีสคีมาและข้อมูลของฐานข้อมูลทั้งหมด เครื่องมือที่ชอบScriptDBและsqlpubwiz.exeดูเหมือนจะตั้งเป้าหมาย SQL Server 2005 แล้ว SQL Server 2012 ล่ะ?

1
ไวยากรณ์นี้ทำงานอย่างไร {fn CurDate ()} หรือ {fn Now ()} ฯลฯ
เมื่อเร็ว ๆ นี้ฉันได้ดูกระบวนการที่เก็บไว้ค่อนข้างเก่าที่เขียนขึ้นสำหรับ SQL Server 2005 และฉันสังเกตเห็นสิ่งที่ฉันไม่เข้าใจ ดูเหมือนจะเป็นการเรียกใช้ฟังก์ชันบางประเภท ตัวอย่าง: SELECT o.name, o.type_desc, o.create_date FROM sys.objects o WHERE o.create_date < {fn Now()} -1; สิ่งนี้จะแสดงแถวทั้งหมดจากsys.objectsที่มีcreate_dateก่อนหน้า 24 ชั่วโมงที่ผ่านมา ถ้าฉันแสดงแผนการดำเนินการสำหรับแบบสอบถามนี้ฉันเห็นว่า{fn Now()}ถูกแทนที่ด้วยgetdate()โปรแกรมฐานข้อมูล: SELECT [o].[name],[o].[type_desc],[o].[create_date] FROM [sys].[objects] [o] WHERE [o].[create_date]<(getdate()-@1) เห็นได้ชัดว่าใช้อยู่ไกลป้านมากกว่า{fn Now()} GetDate()ฉันหนึ่งจะหลีกเลี่ยงไวยากรณ์นี้เช่นกาฬโรคเพราะมันไม่มีเอกสาร

5
เหตุใดเซิร์ฟเวอร์ที่เชื่อมโยงจึงมีข้อ จำกัด ถึง 10 สาขาในนิพจน์ CASE
ทำไมCASEการแสดงออกนี้: SELECT CASE column WHEN 'a' THEN '1' WHEN 'b' THEN '2' ... c -> i WHEN 'j' THEN '10' WHEN 'k' THEN '11' END [col] FROM LinkedServer.database.dbo.table สร้างผลลัพธ์นี้หรือไม่ ข้อความแสดงข้อผิดพลาด: ข่าวสารเกี่ยวกับ 8180, ระดับ 16, สถานะ 1, คำสั่ง Line 1 ไม่สามารถจัดเตรียมได้ ข่าวสารเกี่ยวกับ 125, ระดับ 15, สถานะ 4, นิพจน์กรณีบรรทัด 1 อาจซ้อนอยู่ในระดับ 10 …

5
การกำหนดค่าไดรฟ์ที่เหมาะสมที่สุดสำหรับ SQL Server 2008R2
ฉันมีเซิร์ฟเวอร์ฐานข้อมูลค่อนข้างยุ่งใช้ SQL Server 2008 R2 ที่มีการตั้งค่าต่อไปนี้: SATA RAID 1 (2 ไดรฟ์) - ระบบปฏิบัติการ / โปรแกรม SAS RAID 10 (4 ไดรฟ์) - ไฟล์ฐานข้อมูล Sql (ข้อมูลและบันทึก) SAS RAID 1 (2 ไดรฟ์) - TempDB (ข้อมูลและบันทึก) สมมติว่าฉันไม่สามารถเพิ่มไดรฟ์เพิ่มเติมลงในเซิร์ฟเวอร์นี้ได้ฉันได้ใช้ประโยชน์จากการกำหนดค่าที่มีอยู่ให้ดีที่สุดหรือไม่ หรือฉันควรพิจารณาชุดรูปแบบอื่นที่นี่ที่บันทึกจะถูกแยกออกจากไฟล์ข้อมูลเช่น? ปรับปรุง: สำหรับผู้ที่ขอรายละเอียดฮาร์ดแวร์เพิ่มเติม: ไดรฟ์ SATA (ใช้สำหรับพาร์ติชัน OS / Program) คือ: WD 7200 RPM 3 Gb / s …

3
คำสั่ง SQLCMD ไม่สามารถแทรกเครื่องหมายเน้นเสียงได้
ฉันพยายามเรียกใช้sqlcmd.exeเพื่อตั้งค่าฐานข้อมูลใหม่จากบรรทัดคำสั่ง ฉันใช้ SQL SERVER Express 2012 บน Windows 7 64 บิต นี่คือคำสั่งที่ฉันใช้: SQLCMD -S .\MSSQLSERVER08 -V 17 -E -i %~dp0\aqualogyDB.sql -o %~dp0\databaseCreationLog.log และนี่คือสคริปต์สร้างไฟล์ sql: CREATE DATABASE aqualogy COLLATE Modern_Spanish_CI_AS WITH TRUSTWORTHY ON, DB_CHAINING ON; GO use aqualogy GO CREATE TABLE [dbo].[BaseLayers] ( [Code] nchar(100) NOT NULL , [Geometry] nvarchar(MAX) NOT …

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