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

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

4
ฉันสามารถเปลี่ยนโครงสร้างตารางในธุรกรรมแล้วย้อนกลับหากมีข้อผิดพลาดได้หรือไม่?
ฉันมีALTER TABLEข้อความบางส่วนที่ฉันใช้อยู่ ไม่ใช่ทั้งหมดที่ทำงาน (เป็นผลมาจากการรันการเปรียบเทียบข้อมูล SQL) และฉันต้องการจัดกลุ่มพวกเขาในบางธุรกรรมและย้อนกลับคำสั่งหากมีสิ่งผิดปกติ เป็นไปได้หรือเป็นเพียงข้อมูลที่สามารถย้อนกลับได้?

3
การลดขนาดบันทึกการทำธุรกรรมตกลงเพื่อทำบนฐานข้อมูลจริงหรือไม่?
ใน Microsoft SQL Server 2005 ตกลงเพื่อลดขนาดไฟล์บันทึกของฐานข้อมูลออนไลน์หรือไม่หรือจะทำให้การบริการหยุดชะงักหรือไม่

2
ดูอย่างรวดเร็วว่ามีการจัดสรร RAM ไปยัง SQL Server เท่าใด
ด้วย SQL Server 2005 คุณสามารถดูที่ Task Manager และอย่างน้อยให้ดูคร่าวๆว่าหน่วยความจำจัดสรรให้กับ SQL Server เท่าใด ด้วย SQL Server 2008 ชุดการทำงานหรือขนาดการส่งมอบจะไม่สูงเกินกว่า 500 MB แม้ว่า SQLServer: ตัวนับหน่วยความจำ / เซิร์ฟเวอร์รวมหน่วยความจำเซิร์ฟเวอร์ (KB) จะแสดงสถานะ 16,732,760 มีการตั้งค่าที่จะแสดงหน่วยความจำเซิร์ฟเวอร์จริง ๆ ใน Task Manager หรือไม่? หรือเป็นผลมาจากพวกเขาเปลี่ยนวิธีการใช้หน่วยความจำใน SQL Server

1
มีเหตุผลที่ฉันไม่ควรตั้งเจ้าของ db เป็น [sa] หรือไม่?
เมื่อวานนี้ฉันถามคำถามนี้เกี่ยวกับการเปลี่ยน dbo ของหลายฐานข้อมูลที่ฉันมี การเปลี่ยนแปลงนั้นสมเหตุสมผล แต่ฉันต้องการชัดเจน มีเหตุผลหรือสถานการณ์ที่ดีว่าทำไมฉันไม่ควรตั้งค่า dbo ของฐานข้อมูลเป็น [sa]?

1
SQL Server รู้ว่าภาคแสดงมีความสัมพันธ์กันอย่างไร
ในขณะที่การวิเคราะห์แบบสอบถาม SQL Server 2008 R2 ด้วยการประมาณค่า cardinality ที่ไม่ดี (แม้จะมีการทำดัชนีอย่างง่ายสถิติที่ทันสมัย ​​ฯลฯ ) และด้วยเหตุนี้แผนการสืบค้นที่ไม่ดีฉันพบบทความ KB ที่เกี่ยวข้องบางที: การ แก้ไข: ประสิทธิภาพแย่เมื่อคุณเรียกใช้แบบสอบถาม ที่ประกอบด้วยสหสัมพันธ์และเพรดิเคตใน SQL Server 2008 หรือใน SQL Server 2008 R2 หรือใน SQL Server 2012 ฉันสามารถเดาได้ว่าบทความ KB หมายถึงอะไรโดย "มีความสัมพันธ์" เช่นภาคแสดงข้อ 2 และภาคส่วน # 1 ส่วนใหญ่กำหนดเป้าหมายไปที่แถวเดียวกัน แต่ฉันไม่รู้ว่า SQL Server รู้เกี่ยวกับสหสัมพันธ์เหล่านี้อย่างไร ตารางต้องการดัชนีหลายคอลัมน์ที่มีคอลัมน์จากเพรดิเคตทั้งสองหรือไม่ SQL ใช้สถิติเพื่อตรวจสอบว่าค่าจากคอลัมน์หนึ่งมีความสัมพันธ์กับอีกคอลัมน์หนึ่งหรือไม่? หรือมีวิธีอื่นที่ใช้? ฉันขอสิ่งนี้ด้วยสองเหตุผล: เพื่อกำหนดว่าตารางและแบบสอบถามใดของฉันอาจได้รับการปรับปรุงโดยใช้โปรแกรมแก้ไขด่วนนี้ …

3
สร้างฟังก์ชั่นใหม่ด้วยรหัสถ้ามันไม่มีอยู่
ฉันต้องการสร้างฟังก์ชั่นใหม่ตามสคริปต์ในฐานข้อมูลของฉัน รหัสสคริปต์ด้านล่าง: IF Exists(Select * From sys.sysobjects A Where A.name =N'fn_myfunc' and xtype=N'FN') return; CREATE FUNCTION fn_myfunc () returns varchar(10) AS Begin ... End แต่เมื่อฉันรันสคริปต์ข้างต้น SQL Server จะส่งคืนข้อผิดพลาด: 'CREATE FUNCTION' must be the first statement in a query batch.

2
ชนิดข้อมูลสำหรับเก็บอาร์เรย์ของแฟล็ก (อาเรย์บิตแมป / บิต)
ฉันต้องการจัดเก็บบิตอาร์เรย์สำหรับแต่ละระเบียนของตารางสนับสนุนการดำเนินการต่อไปนี้: ทดสอบว่าตั้งบิตไว้หรือไม่และตั้งค่าบิต (โดยใช้ SQL) การสืบค้นและการตั้งค่าโดยใช้ ADO 2.8 (ไม่ใช่ ADO.NET) การจัดทำดัชนี (เพื่อรับประโยชน์จากคุณสมบัติ "ครอบคลุมดัชนี") จำนวนสูงสุดของบิตจะถูกเก็บไว้ในอาร์เรย์นี้ได้รับการแก้ไขแต่อาจเกิน 32 นั่นคือคอลัมน์intแบบง่าย ๆไม่ได้ผลเสมอไป จากสิ่งที่ฉันเห็นมาจนถึงตอนนี้ตัวเลือกของฉันคือ: ใช้คอลัมน์intหลายรายการ ใช้bigint (ทำงานตราบเท่าที่จำนวนบิตคือ <= 64) ใช้เลขฐานสอง ? ตัวเลือกแรกจะใช้งานได้ แต่ต้องการการรีแฟคเตอร์เล็กน้อยในรหัสที่เข้าถึงข้อมูล ตัวเลือกที่สองเป็นการผ่อนปรนชั่วคราวเท่านั้นและจากการค้นหาของฉันจนถึงตอนนี้ฉันไม่แน่ใจว่า ADO ทำงานได้ดีกับbigintหรือไม่ ฉันไม่มีประสบการณ์กับไบนารีและฉันไม่ได้ตระหนักถึงตัวเลือกอื่น ๆ คุณต้องการเลือกชนิดข้อมูลแบบใดตามข้อกำหนด

4
เรียงลำดับที่ระบุในคีย์หลัก แต่การเรียงลำดับจะถูกดำเนินการบน SELECT
ฉันจัดเก็บข้อมูลเซ็นเซอร์ในตารางSensorValues ตารางและคีย์หลักมีดังนี้: CREATE TABLE [dbo].[SensorValues]( [DeviceId] [int] NOT NULL, [SensorId] [int] NOT NULL, [SensorValue] [int] NOT NULL, [Date] [int] NOT NULL, CONSTRAINT [PK_SensorValues] PRIMARY KEY CLUSTERED ( [DeviceId] ASC, [SensorId] ASC, [Date] DESC ) WITH ( FILLFACTOR=75, DATA_COMPRESSION = PAGE, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY …

2
ตารางคิว FIFO สำหรับพนักงานหลายคนใน SQL Server
ฉันพยายามตอบคำถาม stackoverflow ต่อไปนี้: ฉันควรใช้วิธีการล็อค SQL Server 2005/2008 แบบใดในการประมวลผลแถวของตารางแต่ละแถวในหลาย ๆ กรณีของแอพพลิเคชันเซิร์ฟเวอร์ หลังจากโพสต์คำตอบที่ไร้เดียงสาฉันคิดว่าฉันจะเอาเงินของฉันไปที่ปากของฉันและทดสอบสถานการณ์จริง ๆที่ฉันแนะนำเพื่อให้แน่ใจว่าฉันไม่ได้ส่ง OP ออกไปในการไล่ล่าห่านป่า มันกลายเป็นว่าหนักกว่าที่ฉันคิดไว้มาก (ไม่แปลกใจสำหรับทุกคนฉันแน่ใจ) นี่คือสิ่งที่ฉันได้ลองและคิดเกี่ยวกับ: ครั้งแรกที่ฉันพยายาม TOP 1 UPDATE กับ ORDER BY ROWLOCK, READPASTภายในตารางมาใช้ สิ่งนี้ทำให้เกิดการหยุดชะงักและยังประมวลผลรายการที่ผิดปกติ จะต้องใกล้เคียงกับ FIFO เท่าที่จะทำได้ยกเว้นข้อผิดพลาดที่ต้องพยายามประมวลผลแถวเดียวกันมากกว่าหนึ่งครั้ง ฉันก็พยายามเลือก QueueID ถัดไปต้องการลงในตัวแปรโดยใช้ชุดต่างๆของREADPAST, UPDLOCK, HOLDLOCKและROWLOCKเพื่อรักษาเฉพาะแถวสำหรับการปรับปรุงโดยเซสชั่นที่ รูปแบบทั้งหมดที่ฉันลองใช้นั้นประสบปัญหาเดียวกันกับที่เคยมีมาก่อนและสำหรับการรวมกันบางอย่างกับREADPAST: คุณสามารถระบุล็อค READPAST ในระดับการแยก READ COMMITTED หรือ REPEATABLE READ สิ่งนี้ทำให้เกิดความสับสนเพราะเป็นข้อผูกมัดที่ต้องอ่าน ฉันเคยพบเจอสิ่งนี้มาก่อนและมันน่าหงุดหงิด ตั้งแต่ฉันเริ่มเขียนคำถามนี้ Remus Rusani โพสต์คำตอบใหม่สำหรับคำถาม …

4
ฟิลด์ INCLUDE ดัชนีขนาดใหญ่จะมีผลต่อประสิทธิภาพของระบบอย่างไร
คำถามนี้เป็นคำถามเกี่ยวกับประสิทธิภาพของดัชนี SQL Server กับvarchar(2000)เป็นINCLUDEในดัชนีที่ครอบคลุม ฉันพยายามปรับปรุงประสิทธิภาพในแอปพลิเคชันฐานข้อมูลที่ช้าและไม่เสถียร ในบางกรณีข้อมูลที่มีการเข้าถึงผ่านสตริง varchar ขนาดใหญ่ที่มีการค้นหารวมทั้งการดำเนินสตริง multple เหมือนSUBSTRING(), และSPACE() DATALENGTH()นี่คือตัวอย่างที่ง่ายของการเข้าถึง update fattable set col3 = SUBSTRING(col3,1,10) + '*' + SUBSTRING(col3,12,DATALENGTH(col3)-12) from fattable where substring(col3,10,1) = 'A' and col2 = 2 สคีมามีลักษณะดังนี้: CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] …

2
วิธีแก้ปัญหาการล้างข้อมูลผีของเซิร์ฟเวอร์ SQL ที่จำเป็น
ฉันมีหลายตารางที่มีจำนวนแถวระหว่าง 5M ถึง 1.5G แต่ละตารางมีเขตข้อมูล BLOB ซึ่งขนาดแตกต่างจาก 100 ไบต์ถึง 30 MBytes และเก็บไว้เป็น 'ประเภทค่าขนาดใหญ่นอกแถว' = ON ตารางจะถูกจัดเก็บในกลุ่มไฟล์ที่แตกต่างกันโดยแต่ละไฟล์มี 3-4 ไฟล์ในดิสก์ที่แตกต่างกัน @ LUNs ที่แตกต่างกัน @ SAN ที่เร็วมาก ทุกวันโต๊ะเหล่านี้มีขนาดโตขึ้น 5-100 Gb และมีแถว 600k - 1.5M หลังจากระยะเวลาหนึ่งซึ่งแตกต่างกันไปจาก 2 สัปดาห์ถึง 6 เดือนแถวบางแถวจะถูกลบหรือย้ายไปเก็บถาวร DB ดังนั้นจึงไม่มีแถวใด ๆ ในเวิร์กทอรีที่มีอายุมากกว่า 6 เดือน การกำหนดค่าปัจจุบันของเซิร์ฟเวอร์: SQL เซิร์ฟเวอร์เอ็นจิ้นคือ 2008 R2 SP1 Enterprise @ …

1
เหตุใดจำนวนการดำเนินการสแกนดัชนีแบบกลุ่มจึงสูงมาก
ฉันมีสองแบบสอบถามที่คล้ายกันที่สร้างแผนแบบสอบถามเดียวกันยกเว้นว่าแผนแบบสอบถามหนึ่งดำเนินการสแกนดัชนีแบบกลุ่ม 1316 ครั้งในขณะที่คนอื่น ๆ ดำเนินการมัน 1 ครั้ง ข้อแตกต่างระหว่างแบบสอบถามทั้งสองนี้คือเกณฑ์วันที่แตกต่างกัน แบบสอบถามที่ใช้เวลานานจริง ๆ แล้ว จำกัด วันที่ให้แคบลงและดึงข้อมูลน้อยลง ฉันได้ระบุดัชนีบางอย่างที่จะช่วยในการสืบค้นทั้งสองข้อ แต่ฉันต้องการเข้าใจว่าทำไมตัวดำเนินการ Clustered Index Scan จึงเรียกใช้งาน 1,316 ครั้งสำหรับการสืบค้นที่เกือบจะเหมือนกับครั้งที่เรียกใช้งาน 1 ครั้ง ฉันตรวจสอบสถิติเกี่ยวกับเภสัชจลนศาสตร์ที่กำลังถูกสแกนและพวกเขาค่อนข้างทันสมัย ข้อความค้นหาเดิม: select distinct FIR_Incident.IncidentID from FIR_Incident left join ( select incident_id as exported_incident_id from postnfirssummary ) exported_incidents on exported_incidents.exported_incident_id = fir_incident.incidentid where FI_IncidentDate between '2011-06-01 00:00:00.000' …

5
การรวม ORDER BY บนเคียวรีที่ส่งคืนแถวไม่มีผลกระทบต่อประสิทธิภาพอย่างมาก
เมื่อพิจารณาการเข้าร่วมตารางที่สามอย่างง่ายประสิทธิภาพการค้นหาจะเปลี่ยนไปอย่างมากเมื่อมีการรวม ORDER BY แม้ว่าจะไม่มีการส่งคืนแถว สถานการณ์ปัญหาที่เกิดขึ้นจริงใช้เวลา 30 วินาทีเพื่อส่งกลับศูนย์แถว แต่เป็นทันทีเมื่อไม่รวม ORDER BY ทำไม? SELECT * FROM tinytable t /* one narrow row */ JOIN smalltable s on t.id=s.tinyId /* one narrow row */ JOIN bigtable b on b.smallGuidId=s.GuidId /* a million narrow rows */ WHERE t.foreignId=3 /* doesn't match */ ORDER BY …

5
เป็นไปได้ในการโจมตีบนเซิร์ฟเวอร์ SQL ของฉัน
ตรวจสอบบันทึก SQL Server ของฉันฉันเห็นหลายรายการเช่นนี้ Date: 08-11-2011 11:40:42 Source: Logon Message: Login failed for user 'sa'. Reason: Password did not match for the login provided. [CLIENT: 56.60.156.50] Date: 08-11-2011 11:40:42 Source: Logon Message: Error: 18456. Severity: 14. State: 8. Date: 08-11-2011 11:40:41 Source: Logon Message: Login failed for user 'sa'. Reason: …

2
การเพิ่มประสิทธิภาพ: การย้ายการประกาศตัวแปรไปยังด้านบนของกระบวนการของคุณ
ในขณะที่ทำงานเกี่ยวกับการเพิ่มประสิทธิภาพของโพรซีเดอร์ที่เก็บไว้บางอย่างฉันก็นั่งลงกับ DBA และผ่านขั้นตอนที่เก็บไว้บางอย่างที่มีการบล็อกสูงและ / หรือกิจกรรมการอ่าน / เขียนสูง สิ่งหนึ่งที่ DBA กล่าวถึงคือฉันควรประกาศตัวแปรทั้งหมด (โดยเฉพาะอย่างยิ่งตัวแปรTABLEที่ด้านบนสุดของโพรซีเดอร์ที่เก็บไว้เพื่อหลีกเลี่ยงการคอมไพล์ซ้ำ นี่เป็นครั้งแรกที่ฉันเคยได้ยินเรื่องนี้และกำลังมองหาการยืนยันบางอย่างก่อนที่จะกลับไปสู่ขั้นตอนการจัดเก็บที่แตกต่างกันทั้งหมดที่เรามี เขาเรียกมันว่า "การดูรหัสล่าช้า" และการคอมไพล์ใหม่กำลังล็อคสคีมาซึ่งจะอธิบายการบล็อก การย้ายการประกาศตัวแปรทั้งหมดไปยังด้านบนของโพรซีเดอร์ที่เก็บไว้ของคุณจะลดการคอมไพล์ใหม่หรือไม่?

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