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

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

2
มีวิธีการกำหนดไฟล์ที่แน่นอนที่มีหน่วยการจัดสรรในกลุ่มไฟล์ของหลายไฟล์หรือไม่?
ฉันหวังว่าจะได้รับมุมมองที่ละเอียดว่าไฟล์ฐานข้อมูลใดมีหน่วยการจัดสรรใดสำหรับ HoBT ต่างๆ (ทั้งที่อยู่ในแนวเดียวกันและไม่ได้อยู่ในแนวเดียวกัน) ในฐานข้อมูล แบบสอบถามที่ฉันใช้อยู่เสมอ (ดูด้านล่าง) ให้บริการฉันได้ดีจนกระทั่งเราเริ่มสร้างไฟล์ข้อมูลหลายไฟล์ต่อกลุ่มไฟล์และฉันสามารถที่จะหาวิธีที่จะได้รับรายละเอียดเป็นระดับกลุ่มไฟล์ select SchemaName = sh.name, TableName = t.name, IndexName = i.name, PartitionNumber = p.partition_number, IndexID = i.index_id, IndexDataspaceID = i.data_space_id, AllocUnitDataspaceID = au.data_space_id, PartitionRows = p.rows from sys.allocation_units au join sys.partitions p on au.container_id = p.partition_id join sys.indexes i on i.object_id = p.object_id …

2
วิธีรับการแทรก SQL และ / หรือการปรับปรุงเพื่อไม่ล็อคทั้งตารางใน MS SQL Server
มือใหม่ในฐานข้อมูลทำงานมากดังนั้นขอขอบคุณที่กรุณาอดทนรอด้วยคำถามพื้นฐาน ฉันใช้ SQL Server 2014 บนเครื่องของฉันและฉันมีตารางเล็ก ๆ และแอปพลิเคชันไคลเอนต์ขั้นพื้นฐานเพื่อทดสอบวิธีการต่าง ๆ ด้วย ฉันได้สิ่งที่ดูเหมือนจะล็อคตารางระหว่างทั้งสองINSERT INTOและUPDATEงบ ไคลเอนต์เป็นแอปพลิเคชัน ASP.NET ด้วยรหัสต่อไปนี้: OleDbConnection cn = new OleDbConnection("Provider=SQLNCLI11; server=localhost\\SQLEXPRESS; Database=<my db>; user id=<my uid>; password=<my pwd>"); cn.Open(); OleDbTransaction tn = cn.BeginTransaction(); OleDbCommand cmd = new OleDbCommand("INSERT INTO LAYOUTSv2 (LAYOUTS_name_t, LAYOUTS_enabled_b, LAYOUTS_data_m) VALUES ('name', '-1', 'data')", cn, tn); cmd.ExecuteNonQuery(); …

4
ในกรณีใดธุรกรรมสามารถกระทำจากภายในบล็อกจับเมื่อ XACT_ABORT ตั้งเป็น ON?
ฉันได้อ่านเกี่ยวกับ MSDN และTRY...CATCHXACT_STATE มันมีตัวอย่างต่อไปนี้ที่ใช้XACT_STATEในCATCHบล็อกของการTRY…CATCHสร้างเพื่อตรวจสอบว่าจะกระทำหรือย้อนกลับการทำธุรกรรม: USE AdventureWorks2012; GO -- SET XACT_ABORT ON will render the transaction uncommittable -- when the constraint violation occurs. SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; -- A FOREIGN KEY constraint exists on this table. This -- statement will generate a constraint violation error. DELETE FROM Production.Product …

1
เหตุใด SQL Server จึงปฏิเสธที่จะอัปเดตสถิติเหล่านี้เป็นอย่างอื่นนอกจากสแกนแบบเต็ม
ฉันสังเกตเห็นการดำเนินการสถิติการอัปเดตอัตโนมัติ (20 นาที +) ที่ค่อนข้างใช้เวลานานในการสร้างคลังข้อมูลรายวัน ตารางที่เกี่ยวข้องคือ CREATE TABLE [dbo].[factWebAnalytics]( [WebAnalyticsId] [bigint] IDENTITY(1,1) NOT NULL, [MarketKey] [int] NOT NULL CONSTRAINT [DF_factWebAnalytics_MarketKey] DEFAULT ((-1)), /*Other columns removed*/ CONSTRAINT [PK_factWebAnalytics] PRIMARY KEY CLUSTERED ( [MarketKey] ASC, [WebAnalyticsId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = …

2
ทำไมคำขอ Batch ของฉันเพิ่มขึ้นเมื่อทำการสำรองข้อมูลต่าง
ฉันเริ่มทำการติดตามระยะยาวของกิจกรรมต่าง ๆ ใน SQL Server 2012 ของเราและฉันสังเกตเห็นการเพิ่มของคำขอ Batch ในระหว่างการสำรองข้อมูลที่เพิ่มขึ้นของเรา เพื่อให้ความคิดปกติวันต่อวันเราอยู่ที่ประมาณ 10-20 ชุดคำขอต่อวินาที แต่ในช่วงเวลาที่การสำรองข้อมูลที่แตกต่างกันของเรามันกระโดดไปที่ 100-130 ต่อวินาที ฉันรู้ว่ามันไม่มาก แต่ก็ทำให้ฉันอยากรู้ว่าสิ่งที่เกิดขึ้นนั้นเพิ่มขึ้น 10 เท่า ไม่แน่ใจว่าข้อมูลใดที่คุณอาจต้องใช้เพื่อช่วยแก้ไขปัญหานี้

1
ฉันจะทำลาย XML ของเหตุการณ์ขยายนี้ได้เร็วที่สุดเท่าที่จะเป็นไปได้อย่างไร
ฉันสร้างเซสชันเพิ่มเติมในเหตุการณ์ใน SQL Server 2008 R2 เซสชั่นจะทำงานและรวบรวมกิจกรรมตามที่เกิดขึ้นเช่นเดียวกับที่คุณคาดหวัง ถ้าฉันฉีก xml เมื่อมีเหตุการณ์ค่อนข้างน้อยประสิทธิภาพเป็นที่ยอมรับได้ เมื่อฉันมีเหตุการณ์นับพันใช้เวลานานในการฉีก xml ฉันรู้ว่าฉันกำลังทำสิ่งผิดปกติฉันไม่มีความรู้เพียงพอเกี่ยวกับ internals ของเอ็นจิน XML เพื่อทำความเข้าใจกับสิ่งที่ นี่คือคำจำกัดความของเซสชันเพิ่มเติมของฉัน: IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON …

2
ขีดกลางในชื่อคอมพิวเตอร์ของฉันทำให้เกิดข้อผิดพลาด T-SQL
ฉันเป็นนักพัฒนาไม่ใช่ DBA (ซึ่งกำลังแสดงอยู่ฉันกลัว) ฉันพยายามเรียกใช้ Report Builder 3.0 ด้วย SQL Server 2014 Express บนคอมพิวเตอร์ที่บ้านของฉัน (ชื่อJohn-PC) และไม่สามารถเรียกใช้รายงานของฉัน ฉันตั้งใจสร้างคำสั่งผสมผู้ใช้ / การเข้าสู่ระบบของและuser = John-PC login = John-PC\Johnเมื่อฉันพยายามลบรายการด้วย: Drop Login John-PC\John ฉันได้รับข้อผิดพลาด: ไวยากรณ์ไม่ถูกต้องใกล้กับ '-' ฉันคิดว่าปัญหาคือเครื่องหมายขีดคั่นในชื่อคอมพิวเตอร์ของฉัน มีวิธีแก้ไขข้อผิดพลาดทางไวยากรณ์หรือไม่ มีวิธีอื่นในการเปลี่ยนหรือลบผู้ใช้ (ฉันลองดรอปจากsys.server_principalsแต่ได้รับข้อผิดพลาดที่ไม่สามารถทำการเปลี่ยนแปลงเฉพาะกิจได้) ฉันสามารถให้ชื่อผู้ใช้ / ชื่อเข้าสู่ระบบใหม่กับ Report Builder ได้หรือไม่ หากไม่มีการข้างต้นฉันสามารถเปลี่ยนชื่อคอมพิวเตอร์เป็นJohn_PCหรือจะสร้างโฮสต์ของปัญหาอื่น ๆ ที่ฉันไม่สามารถจินตนาการได้หรือไม่

2
วิธีการติดตั้งอัลกอริธึมตาม / UDF
ฉันมีอัลกอริทึมที่ฉันต้องเรียกใช้กับทุกแถวในตารางที่มี 800K แถวและ 38 คอลัมน์ อัลกอริทึมถูกนำมาใช้ใน VBA และทำการคำนวณทางคณิตศาสตร์โดยใช้ค่าจากบางคอลัมน์เพื่อจัดการคอลัมน์อื่น ปัจจุบันฉันใช้ Excel (ADO) เพื่อสอบถาม SQL และใช้ VBA กับเคอร์เซอร์ฝั่งไคลเอ็นต์เพื่อใช้อัลกอริทึมโดยวนซ้ำทุกแถว มันใช้งานได้ แต่ใช้เวลา 7 ชั่วโมงในการทำงาน รหัส VBA นั้นซับซ้อนพอที่จะทำการถอดรหัสเป็น T-SQL ได้เป็นจำนวนมาก ฉันได้อ่านเกี่ยวกับการรวม CLR และ UDF เป็นเส้นทางที่เป็นไปได้ ฉันคิดเกี่ยวกับการใส่รหัส VBA ในงานสคริปต์ SSIS เพื่อเข้าใกล้ฐานข้อมูล แต่แน่ใจว่ามีผู้เชี่ยวชาญด้านวิธีการสำหรับปัญหาด้านประสิทธิภาพประเภทนี้อยู่ เป็นการดีที่ฉันจะสามารถเรียกใช้อัลกอริทึมกับแถวมากที่สุด (ทั้งหมด?) เป็นไปได้ในวิธีการตั้งค่าแบบขนาน ความช่วยเหลือใด ๆ ที่บอกล่วงหน้าถึงวิธีการรับประสิทธิภาพที่ดีที่สุดกับปัญหาประเภทนี้ --Edit ขอบคุณสำหรับความคิดเห็นฉันใช้ MS SQL 2014 Enterprise ต่อไปนี้เป็นรายละเอียดเพิ่มเติม: อัลกอริทึมค้นหารูปแบบลักษณะในข้อมูลอนุกรมเวลา …

2
การย้อนกลับของ SQL Server ทั้งสองนี้แตกต่างกันอย่างไร
ใน SQL Server 2008 R2 การย้อนกลับสองแบบนี้แตกต่างกันอย่างไร: เรียกใช้ALTERคำสั่งสักครู่แล้วกด 'ยกเลิกการดำเนินการ' ใช้เวลาสองสามนาทีในการย้อนกลับอย่างสมบูรณ์ เรียกใช้ALTERคำสั่งเดียวกันแต่ให้แน่ใจว่าLDFไฟล์นั้นไม่ใหญ่พอที่จะทำให้สำเร็จ เมื่อถึงLDFขีด จำกัด และไม่อนุญาตให้ 'autogrowth' การประมวลผลแบบสอบถามจะหยุดทันที (หรือย้อนกลับเกิดขึ้น) พร้อมกับข้อความแสดงข้อผิดพลาดนี้: The statement has been terminated. Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'SampleDB' is full. To find out why space in the log cannot be reused, see …

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

2
sp_send_dbmail กระบวนงานที่เก็บไว้ส่งพร้อมแนบ
ฉันได้รับมอบหมายให้ส่งรายงานรายเดือนเล็ก ๆ ให้กับหนึ่งในลูกค้าของฉัน รายงานก่อนหน้านี้ได้รับการดำเนินการด้วยตนเองในอินสแตนซ์เอาท์พุทคัดลอกไปยังสเปรดชีตและส่งให้กับลูกค้าเป็นสิ่งที่แนบมา ฉันกำลังมองหาโซลูชันที่ถาวรกว่าดังนั้นฉันตั้งใจจะใช้sp_send_dbmailขั้นตอนการจัดเก็บเพื่อเรียกใช้แบบสอบถามและส่งเป็นสิ่งที่แนบมา ทุกอย่างทำงานได้ แต่การจัดรูปแบบของข้อความ ตอนแรกฉันพยายามแนบผลลัพธ์เป็นไฟล์ CSV ด้วย@query_result_seperator = ','แต่ผลลัพธ์มีอยู่ทุกที่! เมื่อฉันเรียกใช้รายงานตามปกติผลลัพธ์ที่ได้จะดูดีใน SQL แต่การส่งเป็น CSV หรือเพียงแค่ในเนื้อหาของข้อความไม่ได้ ฉันคิดว่ามันอาจทำงานได้ดีกว่าถ้าฉันส่งออกผลลัพธ์เป็น HTML และส่งเป็นไฟล์แนบ / หรือเป็น XML แต่ฉันไม่รู้วิธีการทำเช่นนี้ ไม่มีใครมีข้อเสนอแนะใด ๆ ? ขอบคุณล่วงหน้า!

1
การกู้คืนฐานข้อมูล SQL Server 2012 ในสภาพพร้อมใช้งานสูง
ฉันมีฐานข้อมูลที่อยู่ในโหมดความพร้อมใช้งานสูงตลอดเวลาที่ซิงโครไนซ์กับฐานข้อมูลอื่นในอินสแตนซ์อื่น ฉันจะคืนค่าจาก.bakไฟล์ไปยังฐานข้อมูลหลักโดยใช้T-SQLอย่างไร ฉันยังใหม่กับความพร้อมใช้งานสูงและฉันได้รับคำแนะนำว่าฉันจำเป็นต้องลบฐานข้อมูลออกจากความพร้อมใช้งานสูงก่อนที่ฉันจะสามารถกู้คืนได้ ฉันหวังว่าฉันจะสามารถกู้คืนตรงไปยังหลักในขณะที่AlwaysOnยังคงเปิดใช้งานและมันจะซิงค์อัตโนมัติกับรอง

6
บันทึกธุรกรรมจะไม่ย่อลง DB คิดว่ามันกำลังจำลองข้อมูล
ฉันมีฐานข้อมูล SQL Server 2008 R2 Express ที่ใช้ Kaspersky Security Center และฉันไม่รู้ว่าเกิดอะไรขึ้นกับการติดตั้ง แต่ฐานข้อมูลดูเหมือนจะคิดว่ามันกำลังถูกจำลองแบบและจะไม่เพิ่มพื้นที่ว่างจากบันทึกธุรกรรม เช่น: USE master; SELECT name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled FROM sys.databases WHERE name = 'KAV'; SELECT DATABASEPROPERTYEX('KAV', 'IsPublished'); ผลตอบแทน: name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled -----|----------------|---------------------|--------------- KAV | 6 | REPLICATION | 0 DATABASEPROPERTYEX('KAV', 'IsPublished') ---------------------------------------- 0 [not …

6
วิธีที่มีประสิทธิภาพมากที่สุดในการค้นหาอินสแตนซ์ที่ทำงานอยู่ทั้งหมดของ SQL Server โดยใช้ PowerShell คืออะไร
ฉันได้รับมอบหมายให้ค้นหาอินสแตนซ์ทั้งหมดของ SQL Server ที่ทำงานอยู่ภายในโดเมนของเรา ในหลายกรณีมีหลายอินสแตนซ์ต่อเซิร์ฟเวอร์ ฉันเห็นวิธี PowerShell สองวิธีที่แตกต่างกันในการค้นหาอินสแตนซ์เหล่านี้ แต่ดูเหมือนจะไม่พบอินสแตนซ์ทั้งหมด 1) ใช้ WMI $srvr = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer $computerName $instances = $srvr | ForEach-Object {$_.ServerInstances} | Select @{Name="fullName";Expression={$computerName +"\"+ $_.Name}} return $instances 2) ใช้รีจิสตรีระยะไกล (เช่นเดียวกับ Get-SQLInstance 1 ) ปัญหาที่ใหญ่ที่สุดที่ฉันพบคือเซิร์ฟเวอร์ทั้งหมดที่ฉันรู้จักไม่ทำงานกับผู้ให้บริการ SQL Server WMI และไม่อนุญาตให้ใช้รีจิสตรีระยะไกล มีวิธีที่สามหรือไม่? ฉันสามารถใช้ Remote Desktop เพื่อเข้าถึงเซิร์ฟเวอร์ทั้งหมด แต่ฉันกำลังดูเครื่องจักรประมาณ 30 เครื่องและต้องการหลีกเลี่ยงขั้นตอนแบบแมนนวลหากเป็นไปได้ …

1
การสร้างแผนการดำเนินการใน SQL Server เป็นอย่างไร
รับค่าคงที่ดังต่อไปนี้: ฐานข้อมูลเดียวกันที่มีโครงสร้างเดียวกัน (ตารางดัชนี ฯลฯ ) ข้อมูลเดียวกัน SQL Server และการกำหนดค่าฮาร์ดแวร์เดียวกัน สถิติเดียวกัน ตัวเลือก SET เดียวกันในไคลเอนต์ SQL Server เวอร์ชันเดียวกัน แฟล็กการติดตามเดียวกัน เมื่อกำหนดค่าคงที่เหล่านี้แล้ว SQL Server จะสร้างแผนเดียวกันสำหรับแบบสอบถามที่กำหนดหรือไม่ ถ้าไม่มีข้อควรพิจารณาอื่น ๆ อีกไหม? นอกจากนี้ยังมีองค์ประกอบของ nondeterminism ที่ต้องพิจารณาด้วยหรือไม่?

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