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

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

2
ดัชนี Columnstore ในกลุ่มไฟล์ read_only ป้องกัน CheckDB
จะปรากฏการตั้งค่ากลุ่มไฟล์เพื่อread_onlyป้องกันdbcc checkdbฐานข้อมูลทั้งหมดหากกลุ่มไฟล์มีดัชนี columnstore เมื่อพยายามเรียกใช้checkdbหรือcheckfilegroup( สำหรับกลุ่มไฟล์ใด ๆในฐานข้อมูลรวมถึงการอ่านเขียนที่สองและ[PRIMARY] ) ข้อผิดพลาดด้านล่างจะถูกส่งกลับ ... Msg 8921, Level 16, State 1, Line 24 Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors. มีวิธีการที่รองรับการมีข้อมูล columnstore ในกลุ่มไฟล์แบบอ่านอย่างเดียวหรือไม่? หรือฉันถูกกีดกันจากการตรวจสอบความสมบูรณ์ในสถานการณ์นี้? Repro create database check_fg_ro go use …

2
วิธีค้นหาคิวรี่ที่ยังคงล็อคอยู่
การสืบค้นsys.dm_tran_locksDMV แสดงให้เราเห็นว่าเซสชันใด (SPIDs) กำลังล็อคทรัพยากรเช่นตารางหน้าและแถว สำหรับการล็อคแต่ละครั้งที่ได้มามีวิธีใดบ้างที่จะตัดสินว่าคำสั่ง SQL ใด (ลบ, แทรก, อัพเดตหรือเลือก) ทำให้เกิดการล็อคนั้น? ฉันรู้ว่าmost_recent_query_handleคอลัมน์ของsys.dm_exec_connectionsDMV ทำให้เรามีข้อความของการสืบค้นล่าสุดที่ดำเนินการ แต่หลายครั้งแบบสอบถามอื่น ๆ วิ่งมาก่อนภายใต้เซสชั่นเดียวกัน (SPID) และยังคงล็อค ฉันใช้sp_whoisactiveขั้นตอน (จาก Adam Machanic) แล้วและจะแสดงเฉพาะแบบสอบถามที่อยู่ในบัฟเฟอร์อินพุตในขณะนี้ (คิดว่าDBCC INPUTBUFFER @spid) ซึ่งไม่เสมอไป (และในกรณีของฉันมักจะไม่เคย) คือแบบสอบถามที่ได้รับการล็อค ตัวอย่างเช่น: เปิดธุรกรรม / เซสชัน ดำเนินการคำสั่ง (ที่ถือล็อคทรัพยากร) exec คำสั่งอื่นในเซสชั่นเดียวกัน เปิดธุรกรรม / เซสชันอื่นแล้วลองแก้ไขทรัพยากรที่ถูกล็อคในขั้นตอนที่ 2 sp_whoisactiveขั้นตอนจะชี้ให้เห็นคำสั่งในขั้นตอนที่ 3 ซึ่งไม่ได้เป็นผู้รับผิดชอบในการล็อคและจึงไม่เป็นประโยชน์ คำถามนี้มาจากการวิเคราะห์โดยใช้คุณสมบัติรายงานกระบวนการที่ถูกบล็อกเพื่อค้นหาสาเหตุของการบล็อกสถานการณ์ในการผลิต แต่ละธุรกรรมรันหลายเคียวรีและส่วนใหญ่ครั้งล่าสุด (ที่แสดงในอินพุตบัฟเฟอร์ที่ BPR) ไม่ค่อยถือล็อค ฉันมีคำถามติดตาม: …

1
เหตุใดจึงต้องทำการเชื่อมโยงภายในข้อความค้นหาย่อยส่งกลับค่า NULL
รับสคีมานี้: CREATE TABLE #TEST_COALESCE ( Id int NOT NULL, DateTest datetime NOT NULL, PRIMARY KEY (Id, DateTest) ); INSERT INTO #TEST_COALESCE VALUES (1, '20170201'), (1, '20170202'), (1, '20170203'), (2, '20170204'), (2, '20170205'), (2, '20170206'); ถ้าฉันใช้ COALESCE ภายในแบบสอบถามย่อยมันจะส่งคืน NULL SELECT t1.Id, t1.DateTest, (SELECT TOP 1 COALESCE(t2.DateTest, t1.DateTest) FROM #TEST_COALESCE t2 WHERE …
15 sql-server 

6
สอบถามรายละเอียดความแตกต่างระหว่างแถวสำหรับข้อมูลจำนวนมาก
ฉันมีตารางขนาดใหญ่จำนวนมากแต่ละอันมีคอลัมน์> 300 แอปพลิเคชันที่ฉันใช้สร้าง "ที่เก็บถาวร" ของแถวที่เปลี่ยนแปลงโดยการทำสำเนาแถวปัจจุบันในตารางที่สอง ลองพิจารณาตัวอย่างเล็ก ๆ น้อย ๆ : CREATE TABLE dbo.bigtable ( UpdateDate datetime, PK varchar(12) PRIMARY KEY, col1 varchar(100), col2 int, col3 varchar(20), . . . colN datetime ); ตารางเก็บถาวร: CREATE TABLE dbo.bigtable_archive ( UpdateDate datetime, PK varchar(12) NOT NULL, col1 varchar(100), col2 int, col3 varchar(20), . …

2
วิธีตรวจสอบตัวละครที่ไม่ใช่แอสตี้
วิธีที่ดีที่สุดในการตรวจสอบว่าเขตข้อมูล VARCHAR มีอักขระที่ไม่ใช่แบบ ASCII คืออะไร CHAR(1)ผ่านCHAR(31)และผ่านCHAR(127)CHAR(255) ฉันลองใช้PATINDEXและพบปัญหาต่อไปนี้ ตรวจสอบช่วงล่างทำงานอย่างถูกต้อง SELECT * FROM mbrnotes WHERE PATINDEX('%[' + CHAR(1)+ '-' +CHAR(31)+']%',LINE_TEXT) > 0 ข้อมูลของฉันมีสามระเบียนด้วย 0x1E และทั้งสามรายการที่ส่งคืน แต่เมื่อฉันตรวจสอบเฉพาะช่วงบน: SELECT * FROM mbrnotes WHERE PATINDEX('%[' + CHAR(127)+ '-' +CHAR(255)+']%',LINE_TEXT) > 0 มันส่งกลับใกล้กับระเบียนทั้งหมดในตาราง (จำนวนตาราง 170737 และส่งกลับจำนวน 170735) และเนื่องจากข้อมูลของฉันไม่ได้มีค่าใด ๆ ในช่วงนี้ฉันจะคิดว่ามันไม่ควรกลับไม่มีระเบียน

2
SQL Delete สามารถใช้คำสั่งย่อยได้อย่างไร
รหัสต่อไปนี้ถูกเพิ่มโดยหนึ่งในนักพัฒนาของเราเพื่อลบระเบียนที่ซ้ำกันออกจากตาราง: DELETE SubQuery FROM ( SELECT ID ,FK1 ,FK2 ,CreatedDateTime ,ROW_NUMBER() OVER(PARTITION BY FK1, FK2 ORDER BY CreatedDateTime) AS RowNumber FROM Table ) AS SubQuery WHERE RowNumber > 1 เมื่อตรวจสอบรหัสฉันคิดว่ามันจะไม่ทำงานอย่างไรก็ตามการทดสอบในสภาพแวดล้อมการทดสอบของเรา (SQL 2014) แสดงให้เห็นว่ามันเป็นเช่นนั้น! SQL ทราบได้อย่างไรว่าสามารถแก้ไขคิวรีย่อยและลบระเบียนได้tableอย่างไร

1
แผนการดำเนินการที่มีดัชนีหายไปหลายรายการ
หากคุณเรียกใช้แบบสอบถามด้วย 'รวมแผนการดำเนินการตามจริง' แผนจะแนะนำดัชนีที่ขาดหายไปด้วย รายละเอียดดัชนีอยู่ภายในMissingIndexesแท็กใน XML มีสถานการณ์หรือไม่เมื่อแผนมีข้อเสนอแนะหลายดัชนี? ฉันลองใช้คำสั่ง sql ที่แตกต่างกัน แต่ไม่สามารถหาข้อสงสัยใด ๆ ที่สร้างดัชนีที่ขาดหายไปสองรายการขึ้นไป

2
ตารางระบบ SQL Server สามารถจัดระเบียบได้หรือไม่?
เรามีฐานข้อมูลหลายแห่งที่สร้างและวางตารางจำนวนมาก จากสิ่งที่เราสามารถบอกได้ SQL Server จะไม่ทำการบำรุงรักษาภายในใด ๆ บนตารางฐานของระบบซึ่งหมายความว่าพวกเขาสามารถแยกส่วนกันมากในช่วงเวลาและขนาด bloated สิ่งนี้ทำให้เกิดความกดดันที่ไม่จำเป็นในบัฟเฟอร์พูลและยังส่งผลเสียต่อประสิทธิภาพการทำงานเช่นการคำนวณขนาดของตารางทั้งหมดในฐานข้อมูล ไม่มีใครมีคำแนะนำสำหรับการลดการกระจายตัวของบนตารางหลักภายในเหล่านี้หรือไม่ วิธีแก้ปัญหาที่ชัดเจนวิธีหนึ่งสามารถหลีกเลี่ยงการสร้างตารางจำนวนมาก (หรือสร้างตารางชั่วคราวทั้งหมดใน tempdb) แต่สำหรับจุดประสงค์ของคำถามนี้สมมติว่าแอปพลิเคชันไม่มีความยืดหยุ่นนั้น แก้ไข: การวิจัยเพิ่มเติมแสดงคำถามที่ยังไม่ได้ตอบซึ่งมีความเกี่ยวข้องอย่างใกล้ชิดและระบุว่าการบำรุงรักษาด้วยตนเองบางรูปแบบผ่านทางALTER INDEX...REORGANIZEอาจเป็นตัวเลือก การวิจัยเบื้องต้น ข้อมูลเมตาเกี่ยวกับตารางเหล่านี้สามารถดูได้ในsys.dm_db_partition_stats: -- The system base table that contains one row for every column in the system SELECT row_count, (reserved_page_count * 8 * 1024.0) / row_count AS bytes_per_row, reserved_page_count/128. AS space_mb FROM sys.dm_db_partition_stats …

2
SQL Server รุ่นใหม่มีเสถียรภาพน้อยลงหรือไม่
สถาปนิกฐานข้อมูลของเราบอกกับลูกค้าของเราว่า SQL Server 2014 เป็นตัวเลือกที่ไม่ดีในปี 2555 เพราะขาดประสิทธิภาพและความได้เปรียบด้านเสถียรภาพที่ 2012 มี ทุกสิ่งที่ฉันได้อ่านขัดแย้งนี้ Aaron Bertrand กล่าวว่าสิ่งที่ตรงกันข้ามและเอกสารสีขาวทั้งหมดที่ฉันได้อ่านจาก MS เห็นด้วยเช่นกัน 2014 ได้รับการปรับปรุงและแก้ไขปัญหา AG บางอย่างที่ผู้คนเคยมีในปี 2012 มีข้อเสียที่สำคัญในการเลือก 2014 ในปี 2012 ที่ฉันขาดหายไปหรือไม่?

3
เหตุใดข้อความค้นหา EXISTS ของฉันจึงทำการสแกนดัชนีแทนที่จะค้นหาดัชนี
ฉันกำลังปรับปรุงการค้นหาให้ดีที่สุด สำหรับแบบสอบถามด้านล่าง SET STATISTICS IO ON; DECLARE @OrderStartDate DATETIME2 = '27 feb 2016'; DECLARE @OrderEndDate DATETIME2 = '28 feb 2016'; SELECT o.strBxOrderNo , o.sintOrderStatusID , o.sintOrderChannelID , o.sintOrderTypeID , o.sdtmOrdCreated , o.sintMarketID , o.strOrderKey , o.strOfferCode , o.strCurrencyCode , o.decBCShipFullPrice , o.decBCShipFinal , o.decBCShipTax , o.decBCTotalAmount , o.decWrittenTotalAmount , o.decBCWrittenTotalAmount …

3
ขั้นตอนการจัดเก็บฐานข้อมูลด้วย“ โหมดแสดงตัวอย่าง”
รูปแบบที่พบบ่อยพอสมควรในแอปพลิเคชันฐานข้อมูลที่ฉันทำงานด้วยคือต้องสร้างขั้นตอนการจัดเก็บสำหรับรายงานหรือยูทิลิตี้ที่มี "โหมดตัวอย่าง" เมื่อโพรซีเดอร์ดังกล่าวทำการอัพเดตพารามิเตอร์นี้บ่งชี้ว่าผลลัพธ์ของแอ็คชันควรถูกส่งคืน แต่โพรซีเดอร์ไม่ควรทำการอัพเดตกับฐานข้อมูล วิธีหนึ่งในการทำสิ่งนี้ให้สำเร็จคือการเขียนifคำสั่งสำหรับพารามิเตอร์และมีโค้ดบล็อกที่สมบูรณ์สองบล็อก หนึ่งในนั้นจะปรับปรุงและส่งคืนข้อมูลและอื่น ๆ เพียงแค่ส่งคืนข้อมูล แต่สิ่งนี้ไม่เป็นที่พึงปรารถนาเนื่องจากการทำสำเนารหัสและความเชื่อมั่นค่อนข้างต่ำว่าข้อมูลตัวอย่างเป็นภาพสะท้อนที่ถูกต้องแม่นยำว่าจะเกิดอะไรขึ้นกับการอัปเดต ตัวอย่างต่อไปนี้พยายามใช้ประโยชน์จากจุดบันทึกและตัวแปรของการทำธุรกรรม (ซึ่งไม่ได้รับผลกระทบจากธุรกรรมตรงกันข้ามกับตาราง temp ซึ่งเป็น) เพื่อใช้รหัสบล็อกเดียวสำหรับโหมดแสดงตัวอย่างเป็นโหมดการอัปเดตสด หมายเหตุ: การย้อนกลับของธุรกรรมไม่ใช่ตัวเลือกเนื่องจากการเรียกขั้นตอนนี้อาจซ้อนอยู่ในธุรกรรม นี่คือการทดสอบใน SQL Server 2012 CREATE TABLE dbo.user_table (a int); GO CREATE PROCEDURE [dbo].[PREVIEW_EXAMPLE] ( @preview char(1) = 'Y' ) AS CREATE TABLE #dataset_to_return (a int); BEGIN TRANSACTION; -- preview mode required infrastructure DECLARE @output_to_return …
15 sql-server  t-sql 

1
ตัวชี้วัดเพื่อพิสูจน์หรือหักล้างความต้องการ DBA เพิ่มเติมหรือไม่
ขณะนี้เรามี DBA 2 ตัวฉันและอีกคนหนึ่งและเราทั้งคู่รู้สึกถึงความต้องการทรัพยากรเพิ่มเติม (หรือสอง) ฉันได้สนทนากับผู้จัดการโดยตรงของฉันในหัวข้อนี้สองสามครั้ง แต่ฉันมีปัญหาในการขายความคิด เมื่อเร็ว ๆ นี้ผู้จัดการของเราแบ่งปันกับเราว่าเป็นการดีที่จะเกิดขึ้นกับรายการ "ค่านิยม" ของเราในสิ่งต่าง ๆ ที่เราต้องการหรือรู้สึกว่าเราต้องทำ แต่สิ่งที่จะช่วยได้จริง ๆ คือ "ค่ายาก" แสดงการประหยัดเงินดอลลาร์ คุณสามารถช่วยฉันในการทำความเข้าใจก่อนอื่นถ้าความต้องการของเรารับรู้ถูกต้องตามกฎหมายและถ้าเป็นเช่นนั้นเราจะทำอย่างไรกับรายการ "ค่านิยม" นี้ ฉันรู้สึกว่าเราสามารถคิดสิ่งต่าง ๆ ที่เราต้องทำเพื่อประหยัดเงินของ บริษัท ได้ แต่นั่นอาจจะอยู่ที่ด้านหน้าของรายการลำดับความสำคัญของเราและทำให้เราเครียดมากขึ้นในกระบวนการ เพื่อให้คุณได้เห็นสภาพแวดล้อมของเราในระดับสูงต่อไปนี้เป็นสิ่งที่ฉันกำลังมองหาในแง่ของสิ่งที่เราให้การสนับสนุน เซิร์ฟเวอร์การผลิต - ฐานข้อมูลการผลิตมากกว่า 30+ - เวอร์ชัน SQL มากกว่า200+ - 2008 / 2008R2 / 2012 ค้นหาในปี 2014 และปีต่อมาในปี 2559 แอปพลิเคชัน (บุคคลที่สามและเติบโตที่บ้าน) - …

3
การสำรองข้อมูลบันทึกธุรกรรมแบบอนุกรมหรือแบบขนาน?
เรากำลังใช้ SQL Server 2012 Standard Edition อยู่ ฉันยังใช้สคริปต์ของ Ola Hallengren เพื่อจัดเตรียมกรอบงานที่ง่ายและยืดหยุ่นมากขึ้นสำหรับการสำรองและบำรุงรักษา คำถามนี้ไม่ได้เกี่ยวกับสคริปต์ของ Ola มากนักเนื่องจากเป็นแนวปฏิบัติที่ดีที่สุด ฉันรู้ว่าคำตอบที่ดีที่สุดคือ "ขึ้นอยู่กับข้อกำหนดของ บริษัท ของคุณ" แต่ฉันกำลังพยายามค้นหาคำแนะนำของชุมชนว่าจะทำสิ่งที่ฉันเข้าใจให้ดีที่สุดให้ตรงตามข้อกำหนดของ บริษัท ฉันต้องการตั้งค่าการสำรองข้อมูลบันทึกธุรกรรมทุก 15 นาที วิธีนี้เราหวังว่าจะสูญเสียข้อมูลไม่เกิน 15 นาที ฉันควรตั้งค่าหนึ่งงานที่ใช้ ALL_DATABASES หรือไม่ หรือมันจะดีกว่าถ้าคุณตั้งค่าหนึ่งงานสำหรับแต่ละฐานข้อมูลและเริ่มทำงานพร้อมกัน? ฉันถามเพราะฉันมีความรู้สึกตามวิธีที่ฉันเห็นสคริปต์ของ Ola ทำงานว่าการสำรองข้อมูลนั้นเริ่มต้นอย่างต่อเนื่อง ข้อเสียของซีเรียลคือการสำรองข้อมูลต่อเนื่องแต่ละครั้งจะรอจนกว่าข้อมูลอื่นจะเสร็จสมบูรณ์ สิ่งนี้อาจเพิ่มระยะเวลาระหว่างการสำรองข้อมูล (เช่นมากกว่า 15 นาที) บวกกับความกังวลของฉันคือความล้มเหลวในการสำรองข้อมูลหนึ่งครั้งจะหยุดไม่ให้เกิดขึ้นอีกและฉันไม่ต้องการให้เป็นเช่นนั้น ฉันต้องการให้คนอื่นสำรองข้อมูลต่อไป เป็นจริงหรือไม่ที่สคริปต์ของ Ola ทำงานในอนุกรมและความล้มเหลวจะหยุดการสำรองข้อมูลอย่างต่อเนื่อง และจะดีกว่าหรือไม่ที่จะมีงานสำหรับแต่ละฐานข้อมูล หรืองานเดียวที่ทำทั้งหมด ความชอบของฉันมีต่องานแยกกัน แต่ฉันต้องการที่จะเข้าใจว่า DBA ของ SQL …

1
SQL Server 2014 COUNT (DISTINCT x) ละเว้นเวกเตอร์ความหนาแน่นของสถิติสำหรับคอลัมน์ x
สำหรับสิ่งCOUNT(DISTINCT)ที่มีค่าแตกต่างกัน ~ 1 พันล้านครั้งฉันได้รับแผนคิวรีที่มีการรวมแฮชที่คาดว่าจะมีแถวเพียง 3 ล้านแถวเท่านั้น ทำไมสิ่งนี้จึงเกิดขึ้น SQL Server 2012 สร้างการประมาณการที่ดีดังนั้นนี่เป็นข้อบกพร่องใน SQL Server 2014 ที่ฉันควรรายงานเกี่ยวกับการเชื่อมต่อหรือไม่ แบบสอบถามและประมาณการที่ไม่ดี -- Actual rows: 1,011,719,166 -- SQL 2012 estimated rows: 1,079,130,000 (106% of actual) -- SQL 2014 estimated rows: 2,980,240 (0.29% of actual) SELECT COUNT(DISTINCT factCol5) FROM BigFactTable OPTION (RECOMPILE, QUERYTRACEON 9481) -- Include this …

1
มีหน่วยความจำระบบไม่เพียงพอในกลุ่มทรัพยากรเริ่มต้นเพื่อเรียกใช้แบบสอบถามนี้
ฉันใช้ SQL Server 2014 - 12.0.2269.0 (X64) ใน Windows Server 2012 และฉันประสบปัญหาหน่วยความจำบางอย่าง เมื่อฉันเรียกใช้กระบวนงานที่เก็บไว้ซึ่งทำการคำนวณค่อนข้าง "หนัก" ฉันได้รับข้อผิดพลาดหลังจากบางสิ่งบางอย่างเช่น 10 นาที: มีหน่วยความจำระบบไม่เพียงพอในกลุ่มทรัพยากร 'เริ่มต้น' เพื่อเรียกใช้แบบสอบถามนี้ SQL Server ของฉันมีหลายฐานข้อมูล (เช่น 15 แต่ไม่ได้ใช้พร้อมกันเสมอ) ฉันดูไฟล์บันทึกของ SQL Server (หลังจากฉันได้รับข้อผิดพลาด) และฉันเห็นบรรทัดมากมายเช่นนี้ 2015-12-17 12: 00: 37.57 spid19s ไม่อนุญาตการจัดสรรหน้าสำหรับฐานข้อมูล 'Database_Name' เนื่องจากหน่วยความจำไม่เพียงพอในกลุ่มทรัพยากร 'เริ่มต้น' ดู ' http://go.microsoft.com/fwlink/?LinkId=330673 ' สำหรับข้อมูลเพิ่มเติม รายงานถูกสร้างขึ้นในบันทึกที่มีหน่วยความจำที่ใช้โดยแต่ละองค์ประกอบ (ฉันคิดว่า) MEMORYCLERK_SQLBUFFERPOOLถ้าฉันได้อย่างถูกต้องตีความรายงานที่เราจะเห็นว่ามีจำนวนมากของหน่วยความจำบริโภคโดย คุณสามารถค้นหารายงานได้ที่นี่: http://pastebin.com/kgmk9dPH …

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