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

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

3
เรียงลำดับการรั่วไหลไปยัง tempdb เนื่องจาก varchar (สูงสุด)
บนเซิร์ฟเวอร์ที่มี 32GB เราใช้ SQL Server 2014 SP2 ที่มีหน่วยความจำสูงสุด 25GB เรามีสองตารางที่นี่คุณจะพบโครงสร้างที่เรียบง่ายของทั้งสองตาราง: CREATE TABLE [dbo].[Settings]( [id] [int] IDENTITY(1,1) NOT NULL, [resourceId] [int] NULL, [typeID] [int] NULL, [remark] [varchar](max) NULL, CONSTRAINT [PK_Settings] PRIMARY KEY CLUSTERED ([id] ASC) ) ON [PRIMARY] GO CREATE TABLE [dbo].[Resources]( [id] [int] IDENTITY(1,1) NOT NULL, [resourceUID] [int] NULL, CONSTRAINT …

2
วิธีที่ดีที่สุดในการใส่เครื่องหมายจุลภาคเป็นจำนวนมาก
ฉันเริ่มงานใหม่แล้วและมันเกี่ยวข้องกับการดูเป็นจำนวนมาก มีวิธีง่าย ๆ ในการเพิ่มเครื่องหมายจุลภาคในintหรือdecimalเขตข้อมูลเพื่อให้สามารถอ่านได้หรือไม่ ตัวอย่างเช่น SQL Server แสดงคอลัมน์ทางด้านซ้าย แต่สำหรับสติของตัวเองฉันต้องการให้มันดูเหมือนคอลัมน์ทางด้านขวา: 2036150 -> 2,036,150 ... หรือฉันจะต้องเขียนบางอย่างชั่วร้าย left(right(vandalized_data),6),3) + ',' + right(left(vandalized_data),6),3) ฟังก์ชั่น? สิ่งที่สมบูรณ์แบบคือเครื่องหมายจุลภาคในตารางแสดงผลจากนั้นจำนวนเต็มธรรมดาในผลลัพธ์

1
อัลกอริทึมที่อยู่เบื้องหลังผู้ประกอบการยกเว้นคืออะไร?
อัลกอริทึมภายในของวิธีการที่ตัวดำเนินการยกเว้นทำงานภายใต้การครอบคลุมใน SQL Server คืออะไร ภายในใช้แฮชของแต่ละแถวและเปรียบเทียบหรือไม่ David Lozinksi ได้ทำการศึกษาSQL: วิธีที่เร็วที่สุดในการแทรกบันทึกใหม่ที่ไม่มีอยู่จริงเขาแสดงให้เห็นว่าคำสั่งนั้นเร็วที่สุดสำหรับแถวจำนวนมาก อย่างใกล้ชิดกับผลลัพธ์ของเราด้านล่าง ข้อสันนิษฐาน: ฉันคิดว่าการเข้าร่วมด้านซ้ายจะเร็วที่สุดเนื่องจากจะเปรียบเทียบเพียง 1 คอลัมน์เท่านั้นยกเว้นจะใช้เวลานานที่สุดเนื่องจากต้องเปรียบเทียบคอลัมน์ทั้งหมด ด้วยผลลัพธ์เหล่านี้ตอนนี้ความคิดของเราคือยกเว้นโดยอัตโนมัติและใช้แฮชของแต่ละแถวภายในหรือไม่ ฉันดูยกเว้นแผนการดำเนินการและใช้แฮชบางอย่าง ความเป็นมา: ทีมของเราเปรียบเทียบตารางฮีปสองโต๊ะ ตาราง A แถวที่ไม่ได้อยู่ในตาราง B ถูกแทรกเข้าไปในตาราง B ตารางฮีป (จากระบบไฟล์ข้อความดั้งเดิม) ไม่มีคีย์ / guids / identifier หลัก บางตารางมีแถวที่ซ้ำกันดังนั้นเราจึงพบแฮชของแต่ละแถวและลบรายการที่ซ้ำกันออกและสร้างตัวระบุคีย์หลัก 1) อันดับแรกเราเรียกใช้คำสั่งยกเว้นยกเว้น (คอลัมน์แฮช) select * from TableA Except Select * from TableB, 2) จากนั้นเราก็วิ่งซ้ายเข้าร่วมเปรียบเทียบระหว่างสองตารางใน HashRowId select * …

1
การทริกเกอร์การยิงแม้จะไม่ได้รับผลกระทบ
นี่เป็นคำถามทั่วไปมากกว่า แต่แรงจูงใจสำหรับคำถามนี้เป็นปัญหาที่ฉันประสบขณะใช้ SQL Server ฉันมีทริกเกอร์นี้แนบกับเหตุการณ์แทรกบนตารางที่มีตรรกะบางอย่างซึ่งเป็นผลข้างเคียงจะเพิ่มข้อผิดพลาดหากไม่มีแถวถูกแทรก เมื่อตรวจสอบเพิ่มเติมฉันพบว่ามีการยิงไกแม้จะไม่มีการแทรกแถว ภาษาที่ใช้ในMicrosoft Docs บนทริกเกอร์ DMLดูเหมือนจะขัดแย้งกับพฤติกรรมนี้: ทริกเกอร์ DML เป็นขั้นตอนการจัดเก็บชนิดพิเศษที่จะมีผลโดยอัตโนมัติเมื่อมีเหตุการณ์ DML เกิดขึ้นซึ่งมีผลต่อตารางหรือมุมมองที่กำหนดในทริกเกอร์ นี่เป็นพฤติกรรมเริ่มต้นใน DBMS หรือไม่ มีเหตุผลบางอย่างในการเริ่มต้นทริกเกอร์เมื่อไม่มีแถวที่ได้รับผลกระทบหรือไม่?

1
ทำไมการเข้าร่วมการกำจัดไม่ทำงานกับ sys.query_store_plan
ต่อไปนี้เป็นการทำให้เข้าใจง่ายของปัญหาประสิทธิภาพที่พบกับ Query Store: CREATE TABLE #tears ( plan_id bigint NOT NULL ); INSERT #tears (plan_id) VALUES (1); SELECT T.plan_id FROM #tears AS T LEFT JOIN sys.query_store_plan AS QSP ON QSP.plan_id = T.plan_id; plan_idคอลัมน์เป็นเอกสารที่เป็นคีย์หลักของsys.query_store_planแต่แผนปฏิบัติการไม่ได้ใช้เข้าร่วมการกำจัดเป็นที่คาดว่าจะ: ไม่มีการคาดการณ์คุณลักษณะจาก DMV คีย์หลัก DMV plan_idไม่สามารถซ้ำแถวจากตารางชั่วคราวได้ A LEFT JOINถูกใช้ดังนั้นจึงไม่Tสามารถลบแถวออกได้ แผนการดำเนินการ เหตุใดจึงเป็นเช่นนี้และสิ่งใดที่สามารถทำได้เพื่อรับการเข้าร่วมการกำจัดที่นี่

2
การคำนวณปริมาณสต็อคตามบันทึกการเปลี่ยนแปลง
ลองนึกภาพว่าคุณมีโครงสร้างตารางต่อไปนี้: LogId | ProductId | FromPositionId | ToPositionId | Date | Quantity ----------------------------------------------------------------------------------- 1 | 123 | 0 | 10002 | 2018-01-01 08:10:22 | 5 2 | 123 | 0 | 10003 | 2018-01-03 15:15:10 | 9 3 | 123 | 10002 | 10004 | 2018-01-07 21:08:56 | 3 4 …

2
ส่งคืนลำดับ xml ที่แอตทริบิวต์ไม่มีอักขระเฉพาะ
พิจารณา XML อย่างง่ายต่อไปนี้: <xml> <customer name="Max"> <email address="me@you.com" /> </customer> <customer name="Erik"> <email address="erik@your-mom.com" /> </customer> <customer name="Brent"> <email address="brentcom" /> </customer> </xml> ฉันต้องการที่จะได้รับรายชื่อของ<Customer>ลำดับที่addressแอตทริบิวต์ของ<email>รายการไม่ได้@ประกอบด้วย ดังนั้นฉันต้องการผลลัพธ์ที่ดูเหมือน: <customer name="Brent"> <email address="brentcom" /> </customer> mcve : DECLARE @x XML = '<xml> <customer name="Max"><email address="me@you.com" /></customer> <customer name="Erik"><email address="erik@your-mom.com" /></customer> <customer name="Brent"><email address="brentcom" /></customer> …
10 sql-server  xml  xquery 

1
B-Tree จะปรับสมดุลในระหว่างการลบข้อมูลจากตาราง SQL Server ที่มีดัชนีคลัสเตอร์หรือไม่?
ฉันมีตารางในฐานข้อมูล SQL Server ที่มีดัชนีคลัสเตอร์ในคีย์หลัก ตารางมี 1 ล้านแถว หากฉันลบแถว 10K ออกจากตารางดัชนีจะถูกปรับโครงสร้างใหม่ในระหว่างการดำเนินการลบหรือไม่? การดำเนินการลบเป็นส่วนหนึ่งของกระบวนงานที่เก็บไว้ ในแต่ละครั้งลูกค้ามากกว่าหนึ่งรายสามารถเรียกใช้งานโพรซีเดอร์ที่เก็บไว้ได้อย่างไรก็ตามการรันแต่ละรายการจะลบชุดของแถวเอง (ระบุโดยคีย์หลัก) ฉันกำลังปิดกั้นคีย์ล็อค (ประเภท U) เมื่อลูกค้าหลายรายดำเนินการตามขั้นตอน ล็อคบล็อคเป็นของแถวจากตารางเดียวกันและไม่ได้เป็นส่วนหนึ่งของการทำธุรกรรมใด ๆ ที่ทำงานพร้อมกัน ไม่ควรมีการบล็อกใด ๆ เนื่องจากการรันแต่ละครั้งพยายามลบมันเป็นชุดของแถว การยกระดับการล็อคไม่ได้เกิดขึ้นเนื่องจากปิดอยู่ ฉันสงสัยว่าการดำเนินการลบจะต้องทำให้ดัชนีมีการปรับสมดุลและดังนั้นในระหว่างกระบวนการปรับโครงสร้างจึงสามารถใช้การล็อคปุ่มบนแถวใดก็ได้ของตาราง ฉันขอขอบคุณความคิดเห็นใด ๆ เกี่ยวกับเรื่องนี้

2
ทุกชุดทำให้เกิดการคอมไพล์
เรามีแอปพลิเคชันบุคคลที่สามที่ส่งคำสั่ง T-SQL เป็นชุด ฐานข้อมูลโฮสต์อยู่ใน SQL Server 2016 Enterprise SP1 CU7, 16 คอร์และหน่วยความจำ 256GB เปิดใช้งานการปรับให้เหมาะสมที่สุดสำหรับ Ad-Hoc นี่เป็นตัวอย่างของการสอบถามที่กำลังดำเนินการ: exec sp_executesql N' IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT select field1, field2 from table1 where field1=@1 option(keep plan, keepfixed, loop join) select field3, field4 from table2 where field3=@1 option(keep plan, keepfixed, …

1
จะคูณแถวสำหรับคอลัมน์ที่มีค่าลบและศูนย์ได้อย่างไร
ฉันกำลังพยายามรับผลิตภัณฑ์ของทุกแถวสำหรับคอลัมน์ที่ระบุในการจัดกลุ่มตามแบบสอบถาม ตัวอย่างส่วนใหญ่ที่ฉันได้พบจุดที่ฉันมีต่อการรวมexp, sumและlog exp(sum(log([Column A]))) ปัญหาที่ฉันมีอยู่คือคอลัมน์มีค่าศูนย์บางค่าและทำให้ฉันได้รับข้อผิดพลาดนี้เมื่อค่าศูนย์ส่งผ่านไปยังlogฟังก์ชัน: การดำเนินการจุดลอยตัวไม่ถูกต้องเกิดขึ้น ฉันคิดว่าฉันสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการใช้caseนิพจน์ แต่นั่นก็ไม่เป็นไปตามที่ฉันคิดว่ามันควรจะเป็นเพราะดูเหมือนว่าจะประเมินทุกกรณี select Name, Product = case when min([Value]) = 0 then 0 when min([Value]) <> 0 then exp(sum(log(I))) -- trying to get the product of all rows in this column end from ids group by Name SqlFiddle รับชุดผลลัพธ์ต่อไปนี้: Id Name Value _________________________________ …

2
หากการหยุดชะงักของเหตุการณ์ Parallelism Exchange นั้นน้อยกว่าเหยื่อจะเป็นปัญหาหรือไม่?
เราเห็นจำนวนDeadlocks แบบขนานภายในเธรดเหล่านี้จำนวนมากในสภาพแวดล้อมการผลิตของเรา (SQL Server 2012 SP2 - ใช่ ... ฉันรู้ ... ) อย่างไรก็ตามเมื่อดู Deadlock XML ที่ถูกบันทึกผ่าน Extended Events รายการเหยื่อนั้นว่างเปล่า <victim-list /> deadlocking ปรากฏอยู่ระหว่าง 4 กระทู้สองกับสองกับWaitType="e_waitPipeNewRow"WaitType="e_waitPipeGetRow" <resource-list> <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19"> <owner-list> <owner id="process4649868" /> </owner-list> <waiter-list> <waiter id="process40eb498" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21"> <owner-list> <owner id="process368ecf8" /> </owner-list> …

1
SQL Server Row โดยการเข้าถึงแถว
ฉันมีโครงสร้างตารางดังนั้น (แบบง่าย) Name, EMail, LastLoggedInAt ฉันมีผู้ใช้ใน SQL Server (RemoteUser) ที่ควรจะสามารถดูข้อมูลได้ (ผ่านแบบสอบถามแบบใช้เลือกข้อมูล) ที่ฟิลด์ LastLoggdInAt ไม่ว่าง ดูเหมือนว่าฉันจะทำเช่นนี้? เป็นไปได้ไหม?

1
ปรับดัชนีให้เหมาะสมบนตารางแถว 2,135,044,521
ฉันมีปัญหา I / O กับตารางขนาดใหญ่ สถิติทั่วไป ตารางมีลักษณะสำคัญดังต่อไปนี้: สภาพแวดล้อม: ฐานข้อมูล Azure SQL (ระดับชั้นเป็น P4 พรีเมียม (500 DTU)) แถว: 2,135,044,521 พาร์ติชันที่ใช้ 1,275 ดัชนีคลัสเตอร์และพาร์ติชัน แบบ นี่คือการใช้ตาราง: CREATE TABLE [data].[DemoUnitData]( [UnitID] [bigint] NOT NULL, [Timestamp] [datetime] NOT NULL, [Value1] [decimal](18, 2) NULL, [Value2] [decimal](18, 2) NULL, [Value3] [decimal](18, 2) NULL, CONSTRAINT [PK_DemoUnitData] PRIMARY KEY …

2
การทำบันทึกการสำรองข้อมูลธุรกรรมทุก 15 นาทีใช้พื้นที่ดิสก์มากกว่าการสำรองข้อมูลบันทึกทุก 6 ชั่วโมงหรือไม่?
ในสภาพแวดล้อมของเราพื้นที่เก็บข้อมูลเครือข่ายเหลือน้อย ในเวลาเดียวกันฉันต้องการตรวจสอบให้แน่ใจว่าเราใช้การสำรองข้อมูลบันทึกธุรกรรมทุก 15 นาทีแทนที่จะเป็นปัจจุบันทุก 6 ชั่วโมง คำถามของฉันจะเปลี่ยนช่วงเวลาการสำรองข้อมูลบันทึกจาก 6 ชั่วโมงเป็นทุก ๆ 15 นาทีใช้พื้นที่ดิสก์มากขึ้นหรือไม่

1
ใครใช้เธรดคนงานของฉัน SQL Server 2014 - HADR
เมื่อเร็ว ๆ นี้เรามีปัญหาเกี่ยวกับสภาพแวดล้อม HADR ของ SQL Server 2014 ซึ่งเซิร์ฟเวอร์ตัวใดตัวหนึ่งขาดเธรดของผู้ปฏิบัติงาน เราได้รับข้อความ: กลุ่มเธรดสำหรับกลุ่มความพร้อมใช้งาน AlwaysOn ไม่สามารถเริ่มเธรดผู้ปฏิบัติงานใหม่ได้เนื่องจากมีเธรดผู้ปฏิบัติงานที่พร้อมใช้งานไม่เพียงพอ ฉันแล้วเปิดคำถามอื่นเพื่อให้ได้คำสั่งที่ (ผมคิดว่า) จะช่วยให้ผมวิเคราะห์ปัญหา ( มันเป็นไปได้ที่จะเห็นการใช้งานซึ่ง SPID ซึ่งจัดตารางเวลา (ด้ายคน)? ) แม้ว่าตอนนี้ฉันจะมีแบบสอบถามเพื่อค้นหาเธรดที่ใช้ระบบนี้ แต่ฉันไม่เข้าใจว่าทำไมเซิร์ฟเวอร์นั้นถึงไม่มีเธรดของผู้ปฏิบัติงาน สภาพแวดล้อมของเรามีดังนี้: 4 Windows Server 2012 R2 SQL Server 2014 Enterprise 24 ตัวประมวลผล -> 832 เธรดผู้ทำงาน 256 GB ราม 12 กลุ่มความพร้อมใช้งาน (โดยรวม) 642 ฐานข้อมูล (โดยรวม) ดังนั้นเซิร์ฟเวอร์ที่มีปัญหามีการกำหนดค่าต่อไปนี้: 5 …

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