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

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

1
DBA วันแรกในงานใหม่ - ตรวจสอบข้อมูลสำรองและความปลอดภัย - อย่างไร ควรตรวจสอบอะไรอีก
โดยทั่วไปเมื่อฉันเริ่มต้นในสภาพแวดล้อมใหม่ฉันมักจะตรวจสอบที่มีการสำรองข้อมูลเมื่อเต็มล่าสุดถูกนำมาใช้เมื่อมีการคืนค่าครั้งล่าสุดและฉันตรวจสอบความปลอดภัยด้วย วิธีที่ฉันทำคือผ่าน T-SQL ตรวจสอบข้อมูลสำรอง ;with Radhe as ( SELECT @@Servername as [Server_Name], B.name as Database_Name, ISNULL(STR(ABS(DATEDIFF(day, GetDate(), MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup, ISNULL(Convert(char(11), MAX(backup_finish_date), 113)+ ' ' + CONVERT(VARCHAR(8),MAX(backup_finish_date),108), 'NEVER') as LastBackupDate ,BackupSize_GB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00/1024.00 AS NUMERIC(18,2)) ,BackupSize_MB=CAST(COALESCE(MAX(A.BACKUP_SIZE),0)/1024.00/1024.00 AS NUMERIC(18,2)) ,media_set_id = MAX(A.media_set_id) ,[AVG Backup Duration]= AVG(CAST(DATEDIFF(s, A.backup_start_date, A.backup_finish_date) AS int)) ,[Longest Backup …


1
ประสิทธิภาพที่แปลกประหลาดมากกับดัชนี XML
คำถามของฉันเป็นไปตามนี้: https://stackoverflow.com/q/35575990/5089204 เพื่อให้คำตอบนั้นฉันได้ทำการทดสอบสถานการณ์ต่อไปนี้ สถานการณ์การทดสอบ ก่อนอื่นฉันจะสร้างตารางทดสอบและเติมเต็ม 100.000 แถว ตัวเลขสุ่ม (0 ถึง 1,000) ควรนำไปสู่ ​​~ 100 แถวสำหรับแต่ละหมายเลขสุ่ม หมายเลขนี้ถูกใส่ในคอลัมน์ varchar และเป็นค่าใน XML ของคุณ จากนั้นฉันจะโทรเช่น OP มีความต้องการด้วย. exist () และ. nodes () โดยมีข้อได้เปรียบเล็กน้อยสำหรับวินาที แต่ทั้งคู่ใช้เวลา 5 ถึง 6 วินาที ในความเป็นจริงฉันทำการโทรสองครั้ง: ครั้งที่สองในลำดับที่สลับกันและเปลี่ยนการค้นหาเล็กน้อยและใช้ "// item" แทนพา ธ เต็มเพื่อหลีกเลี่ยงผลบวกปลอมผ่านผลลัพธ์หรือแผนแคช จากนั้นฉันจะสร้างดัชนี XML และทำการโทรเดียวกัน ตอนนี้ - อะไรทำให้ฉันประหลาดใจจริงๆ! - the .nodeswith …

2
ตัวเลือกใดมีประสิทธิภาพมากกว่า: เลือกจากเซิร์ฟเวอร์ที่เชื่อมโยงหรือแทรกลงในเซิร์ฟเวอร์ที่เชื่อมโยง
สมมติว่าฉันต้องส่งออกข้อมูลจากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น (ผ่านเซิร์ฟเวอร์ที่เชื่อมโยง) ข้อความใดจะมีประสิทธิภาพมากขึ้น การดำเนินการในเซิร์ฟเวอร์ต้นทาง: INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table] SELECT a, b, c, ... FROM [dbo].Udf_GetExportData() หรือดำเนินการในเซิร์ฟเวอร์เป้าหมาย: INSERT INTO [dbo].[Table] SELECT a, b, c, ... FROM OPENQUERY([OriginLinkedServer], 'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()') อันไหนจะเร็วกว่าและใช้ทรัพยากรน้อยลง (ทั้งเซิร์ฟเวอร์ต้นทางและเซิร์ฟเวอร์เป้าหมาย) เซิร์ฟเวอร์ทั้งสองเป็น SQL Server 2005

3
หน่วยความจำ SQL Server Express และ CPU จำกัด ต่ออินสแตนซ์หรือไม่
ถ้าฉันมี RAM 8GB ในเซิร์ฟเวอร์และฉันเรียกใช้อินสแตนซ์ 4 รายการของ SQL Server Express ขีด จำกัด หน่วยความจำทั้งหมดที่ใช้โดย SQL Server จะเป็น 1GB หรือ 4GB หรือไม่ ขอแนะนำให้เรียกใช้หลาย ๆ กรณีเช่นนี้เพื่อให้แต่ละฐานข้อมูลใช้ทรัพยากรได้ดีขึ้นหรือไม่ (สมมติว่าเซิร์ฟเวอร์มีทรัพยากรมากมาย)

1
ฉันจะแนบฐานข้อมูลใน SQL Server ได้อย่างไร
คำถามทั่วไปที่เกี่ยวข้องกับการแนบฐานข้อมูลใน SQL Server: การแนบหรือแยกฐานข้อมูลหมายความว่าอย่างไร ฉันจะแยกฐานข้อมูลได้อย่างไร ฉันจะแนบฐานข้อมูลได้อย่างไร การแนบและสร้างบันทึกใหม่หมายความว่าอย่างไร ฉันจะทำอย่างไรใน SQL Server Express ฉันจะพิจารณาถอดและติดตั้งเมื่อใด มีความเสี่ยงหรือคำเตือนหรือไม่? แล้วการเชื่อมต่อระหว่าง SQL Server กับรุ่นต่าง ๆ ล่ะ? (มาตรฐานสู่องค์กร? 2000 ถึง 2008? 2012 ถึง 2008?)
32 sql-server 

2
ฉันจะหาแบบฝึกหัดการปรับฐานข้อมูลสำหรับการเรียนรู้ได้ที่ไหน
ในฐานะนักพัฒนาซอฟต์แวร์ DBA มักจะรับผิดชอบในการแก้ไขปัญหาประสิทธิภาพในระดับฐานข้อมูลดังนั้นเราจึงไม่ได้รับประสบการณ์มากนักในการวินิจฉัยปรับจูนสอบถามซ้ำอีกครั้ง ฉันกำลังมองหาฐานข้อมูลที่มีตารางข้อมูลคิวรีทริกเกอร์ SPs และอื่น ๆ ซึ่งมีปัญหาด้านประสิทธิภาพโดยเจตนาและหวังว่าจะมีชุดของแบบฝึกหัดที่คุณพยายามระบุและแก้ไขปัญหา เป็นการดีที่จะอยู่บนเซิร์ฟเวอร์ MS SQL ใครรู้เรื่องนี้บ้าง

2
ในฐานะ DBA ฉันจะเปลี่ยนจาก Oracle เป็น SQL Server ได้อย่างไร
ฉันเป็น Oracle DBA ที่มีประสบการณ์ Sybase ด้วย อะไรคือความแตกต่างทางสถาปัตยกรรมและแนวคิดที่สำคัญระหว่างสองแพลตฟอร์ม RDBMS? คำตอบที่คล้ายกับ SQL Server-> คำถาม Oracle ที่นี่จะใช้งานมากที่สุด

5
การจัดการการเข้าถึงตารางคีย์พร้อมกันโดยไม่มี deadlocks ใน SQL Server
ฉันมีตารางที่ใช้โดยแอปพลิเคชันรุ่นเก่าแทนIDENTITYเขตข้อมูลในตารางอื่น ๆ แถวในตารางแต่ละเก็บ ID ที่ใช้ล่าสุดสำหรับเขตที่มีชื่อในLastIDIDName บางครั้ง proc ที่เก็บไว้จะได้รับ deadlock - ฉันเชื่อว่าฉันได้สร้างตัวจัดการข้อผิดพลาดที่เหมาะสม แต่ฉันสนใจที่จะดูว่าวิธีการนี้ใช้ได้ตามที่ฉันคิดหรือไม่หรือถ้าฉันเห่าต้นไม้ผิดที่นี่ ฉันค่อนข้างแน่ใจว่าควรมีวิธีการเข้าถึงตารางนี้โดยไม่มีการหยุดชะงักใด ๆ เลย READ_COMMITTED_SNAPSHOT = 1ฐานข้อมูลตัวเองถูกกำหนดค่าด้วย ก่อนอื่นนี่คือตาราง: CREATE TABLE [dbo].[tblIDs]( [IDListID] [int] NOT NULL CONSTRAINT PK_tblIDs PRIMARY KEY CLUSTERED IDENTITY(1,1) , [IDName] [nvarchar](255) NULL, [LastID] [int] NULL, ); และดัชนี nonclustered บนIDNameสนาม: CREATE NONCLUSTERED INDEX [IX_tblIDs_IDName] ON [dbo].[tblIDs] ( …

3
ทำไม SQL Server ใช้แผนการดำเนินการที่ดีขึ้นเมื่อฉันอินไลน์ตัวแปร
ฉันมีแบบสอบถาม SQL ที่ฉันพยายามปรับให้เหมาะสม: DECLARE @Id UNIQUEIDENTIFIER = 'cec094e5-b312-4b13-997a-c91a8c662962' SELECT Id, MIN(SomeTimestamp), MAX(SomeInt) FROM dbo.MyTable WHERE Id = @Id AND SomeBit = 1 GROUP BY Id MyTable มีสองดัชนี: CREATE NONCLUSTERED INDEX IX_MyTable_SomeTimestamp_Includes ON dbo.MyTable (SomeTimestamp ASC) INCLUDE(Id, SomeInt) CREATE NONCLUSTERED INDEX IX_MyTable_Id_SomeBit_Includes ON dbo.MyTable (Id, SomeBit) INCLUDE (TotallyUnrelatedTimestamp) เมื่อฉันดำเนินการแบบสอบถามตรงตามที่เขียนไว้ข้างต้น SQL Server …

6
ทำให้ SqlClient เป็นค่าเริ่มต้นเป็น ARITHABORT ON
สิ่งแรกแรก: ผมใช้ MS SQL Server 2008 ด้วยฐานข้อมูลที่ระดับความเข้ากันได้ 80 System.Data.SqlClient.SqlConnectionและการเชื่อมต่อกับสุทธิของ สำหรับเหตุผลด้านประสิทธิภาพฉันได้สร้างมุมมองที่จัดทำดัชนีแล้ว ARITHABORT ONเป็นผลให้การปรับปรุงตารางการอ้างอิงในมุมมองความจำเป็นที่จะต้องทำด้วย อย่างไรก็ตามผู้สร้างโปรไฟล์แสดงว่า SqlClient เชื่อมต่ออยู่ARITHABORT OFFดังนั้นการอัพเดทตารางเหล่านั้นจึงล้มเหลว มีการตั้งค่ากลางเพื่อให้ SqlClient ใช้งานARITHABORT ONหรือไม่ สิ่งที่ดีที่สุดที่ฉันสามารถค้นหาได้คือการดำเนินการด้วยตนเองทุกครั้งที่มีการเปิดการเชื่อมต่อ แต่การอัปเดตฐานรหัสที่มีอยู่เพื่อทำสิ่งนี้จะเป็นงานที่ค่อนข้างใหญ่ดังนั้นฉันจึงกระตือรือร้นที่จะหาวิธีที่ดีกว่า


1
ทำไมความเร็วในการดำเนินการคำสั่งขึ้นอยู่กับการเชื่อมต่อเครือข่าย?
ดูเหมือนว่าความเร็วในการดำเนินการ T-SQL นั้นขึ้นอยู่กับเวลาแฝงของการเชื่อมต่อเครือข่ายกับเซิร์ฟเวอร์ ฉันสันนิษฐานว่าถ้า SQL Server ไม่มีอะไรจะรายงานกลับไปยังไคลเอนต์เกี่ยวกับมันก็จะดำเนินไปจนกว่าจะเสร็จ แต่การทดสอบแสดงให้เห็นอีกเรื่องหนึ่ง create procedure UselessLoop @I int as declare @D datetime = getdate() while @I > 0 set @I -= 1 print datediff(millisecond, @D, getdate()) exec UselessLoop 100000 Server Milliseconds local 53 nearby 63 faraway 660 exec UselessLoop 1000000 Server Milliseconds local 546 nearby …
31 sql-server  t-sql 

8
ผลกระทบด้านความปลอดภัยของการกู้คืนข้อมูลสำรองจากแหล่งที่ไม่รู้จักหรือไม่?
สถานการณ์จำลอง : คุณส่งการสำรองฐานข้อมูลและบอกให้คืนค่าไปยังเซิร์ฟเวอร์ (ที่โฮสต์ฐานข้อมูลอื่นอยู่แล้ว) แต่ไม่ได้รับข้อมูลที่เป็นประโยชน์เกี่ยวกับการสำรองข้อมูลที่มีหรือว่าแหล่งข้อมูลนั้นควรเชื่อถือได้หรือไม่ คำถามที่ 1 : ความหมายของการกู้คืนข้อมูลสำรองที่อาจเป็นอันตรายได้อย่างไร คำถามที่ 2 : คุณสามารถปกป้องเซิร์ฟเวอร์ / ข้อมูลในฐานข้อมูลอื่นจากผลกระทบของการกู้คืนข้อมูลสำรองที่อาจเป็นอันตรายได้อย่างไร RESTORE VERIFYONLYดูเหมือนจะเป็นก้าวแรกที่ดี คำตอบที่ดีที่สุดคือ 'กู้คืนฐานข้อมูลใน sandbox VM โดยไม่ต้องเข้าถึงโลกภายนอก' แต่ลองสมมติว่าตัวเลือกนั้นอยู่นอกตาราง ควรทำอะไรในสถานการณ์นี้

2
เหตุใดข้อผิดพลาดการสืบค้นที่ตั้งค่าผลลัพธ์ว่างใน SQL Server 2012
เมื่อเรียกใช้แบบสอบถามต่อไปนี้ใน MS SQL Server 2012 แบบสอบถามที่สองล้มเหลว แต่ไม่ใช่แบบสอบถามแรก นอกจากนี้เมื่อเรียกใช้โดยไม่มีส่วนคำสั่งทั้งสองข้อจะล้มเหลว ฉันแพ้ทำไมทั้งสองล้มเหลวเนื่องจากทั้งคู่ควรมีชุดผลลัพธ์ว่างเปล่า ความช่วยเหลือ / ความเข้าใจใด ๆ ที่มีความนิยม create table #temp (id int primary key) create table #temp2 (id int) select 1/0 from #temp where id = 1 select 1/0 from #temp2 where id = 1

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