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

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

3
ฉันสามารถย้ายแถวระหว่างพาร์ติชั่นโดยอัพเดตพาร์ติชั่นคีย์ได้ไหม?
ฉันคิดว่านี่เป็นคำถามที่ค่อนข้างง่าย แต่จริง ๆ แล้วฉันมีช่วงเวลาที่ยากลำบากในการหาคำตอบสำหรับเรื่องนี้ คำถาม: คุณสามารถย้ายแถวของข้อมูลภายในตารางที่แบ่งพาร์ติชันจากพาร์ติชันหนึ่งไปยังอีกพาร์ติชันโดยเพียงแค่การปรับปรุงคอลัมน์พาร์ติชันเพื่อที่จะข้ามขอบเขตพาร์ติชัน? ตัวอย่างเช่นถ้าฉันมีตารางที่มีพาร์ติชันคีย์: CREATE TABLE SampleTable ( SampleID INT PRIMARY KEY, SampleResults VARCHAR(100) NOT NULL, ) ด้วยฟังก์ชั่นพาร์ติชันที่จับคู่กับคีย์หลัก: CREATE PARTITION FUNCTION MyPartitionFunc (INT) AS RANGE LEFT FOR VALUES (10000, 20000); ฉันสามารถย้ายแถวจากพาร์ติชันแรกไปยังพาร์ติชันที่สามได้โดยเปลี่ยน SampleID จาก 1 เป็น 500,000 (พูด) 500,000 หรือไม่ หมายเหตุ: ฉันติดแท็กเป็นทั้งเซิร์ฟเวอร์ sql 2005 และ 2008 เนื่องจากทั้งสองสนับสนุนการแบ่งพาร์ติชัน พวกเขาจัดการกับมันแตกต่างกันหรือไม่?

3
ฉันจะรับประกันได้อย่างไรว่าการแทรกไปยัง SQL Server 2008 R2 จะถูกแคชใน RAM ก่อน?
ลองนึกภาพสตรีมของข้อมูลที่ "ระเบิด" นั่นคือสามารถมี 10,000 เหตุการณ์มาถึงอย่างรวดเร็วตามด้วยอะไรสักอย่างในหนึ่งนาที คำแนะนำจากผู้เชี่ยวชาญของคุณ: ฉันจะเขียนโค้ดแทรก C # สำหรับ SQL Server ได้อย่างไรซึ่งรับประกันว่า SQL จะแคชทุกอย่างทันทีใน RAM ของตัวเองโดยไม่บล็อกแอปของฉันมากกว่าที่จะป้อนข้อมูลลงใน RAM ดังกล่าว เพื่อให้บรรลุสิ่งนี้คุณรู้หรือไม่ว่ารูปแบบใด ๆ สำหรับการตั้งค่าเซิร์ฟเวอร์ SQL เองหรือรูปแบบการตั้งค่าตาราง SQL แต่ละตารางที่ฉันกำลังเขียน แน่นอนฉันสามารถทำเวอร์ชั่นของฉันเองซึ่งเกี่ยวข้องกับการสร้างคิวของตัวเองใน RAM - แต่ฉันไม่ต้องการที่จะสร้างยุคหินขวานยุคหินใหม่เพื่อพูด

2
CROSS ใช้ผลิตการรวมภายนอก
เพื่อเป็นการตอบสนองต่อการนับ SQL ที่แตกต่างกันบนพาร์ติชัน Erik Darling โพสต์รหัสนี้เพื่อหลีกเลี่ยงการขาดCOUNT(DISTINCT) OVER (): SELECT * FROM #MyTable AS mt CROSS APPLY ( SELECT COUNT(DISTINCT mt2.Col_B) AS dc FROM #MyTable AS mt2 WHERE mt2.Col_A = mt.Col_A -- GROUP BY mt2.Col_A ) AS ca; แบบสอบถามใช้CROSS APPLY(ไม่OUTER APPLY) ดังนั้นเหตุใดจึงมีการรวมภายนอกในแผนการดำเนินการแทนการเข้าร่วมภายใน ทำไมการไม่แสดงความคิดเห็นกลุ่มโดยประโยคส่งผลให้เข้าร่วมภายใน? ฉันไม่คิดว่าข้อมูลมีความสำคัญ แต่คัดลอกจาก kevinwhat จากคำถามอื่น: create table #MyTable ( …

5
สถาปัตยกรรมดัชนีที่เหมาะสมคืออะไรเมื่อถูกบังคับให้ใช้ IsDeleted (การลบแบบอ่อน)?
ขณะนี้เรามีฐานข้อมูลและแอปพลิเคชันที่มีอยู่ซึ่งทำงานได้อย่างสมบูรณ์ ฉันไม่มีความสามารถในการเปลี่ยนสถาปัตยกรรม ณ จุดนี้ วันนี้แต่ละตารางในฐานข้อมูลมีฟิลด์ "IsDeleted" NOT NULL BIT ที่มีค่าเริ่มต้นเป็น '0' เมื่อแอปพลิเคชัน "ลบ" ข้อมูลมันเพียงอัปเดตการตั้งค่าสถานะ IsDeleted เป็น 1 สิ่งที่ฉันมีปัญหาในการทำความเข้าใจคือดัชนีของแต่ละตารางควรมีโครงสร้างอย่างไร ตอนนี้ทุกแบบสอบถาม / เข้าร่วม / ฯลฯ จะดำเนินการตรวจสอบ IsDeleted เป็นมาตรฐานที่นักพัฒนาของเราต้องปฏิบัติตาม ที่ถูกกล่าวว่าฉันพยายามที่จะตรวจสอบว่าดัชนีคีย์หลักคลัสเตอร์ทั้งหมดของฉันในแต่ละตารางจะต้องมีการเปลี่ยนแปลงเพื่อให้รวมถึงคีย์หลักและฟิลด์ BIT IsDeleted นอกจากนี้เนื่องจากทุกแบบสอบถาม / เข้าร่วม / ฯลฯ ต้องใช้การตรวจสอบ IsDeleted เป็นข้อสมมติฐานที่เหมาะสมหรือไม่ที่ดัชนีทุกเดียว (ไม่ใช่คลัสเตอร์ด้วย) ควรรวมเขตข้อมูล IsDeleted เป็นเขตข้อมูลแรกของดัชนีหรือไม่ อีกคำถามหนึ่งที่ฉันมีคือดัชนีรอบตัวกรอง ฉันเข้าใจว่าฉันสามารถใส่ตัวกรองในดัชนีเช่น "WHERE IsDeleted = 0" เพื่อลดขนาดของดัชนี อย่างไรก็ตามเนื่องจากการเข้าร่วม / …

1
SELECT TOP 1 จากตารางที่มีขนาดใหญ่มากในคอลัมน์ดัชนีนั้นช้ามาก แต่ไม่ใช่ด้วยลำดับย้อนกลับ (“ desc”)
เรามีฐานข้อมูลขนาดใหญ่ประมาณ 1TB ใช้ SQL Server 2014 บนเซิร์ฟเวอร์ที่ทรงพลัง ทุกอย่างทำงานได้ดีไม่กี่ปี ประมาณ 2 สัปดาห์ที่ผ่านมาเราทำการบำรุงรักษาอย่างสมบูรณ์ซึ่งรวมถึง: ติดตั้งอัปเดตซอฟต์แวร์ทั้งหมด สร้างดัชนีและไฟล์ฐานข้อมูลขนาดกะทัดรัดทั้งหมด อย่างไรก็ตามเราไม่ได้คาดหวังว่าในบางช่วงการใช้งาน CPU ของ DB จะเพิ่มขึ้นมากกว่า 100% เป็น 150% เมื่อการโหลดจริงเหมือนกัน หลังจากการแก้ไขปัญหาจำนวนมากเราได้ จำกัด ให้แคบลงเป็นคำถามที่ง่ายมาก แต่เราไม่พบวิธีแก้ปัญหา การสืบค้นนั้นง่ายมาก: select top 1 EventID from EventLog with (nolock) order by EventID ใช้เวลาประมาณ 1.5 วินาทีเสมอ! อย่างไรก็ตามเคียวรีที่คล้ายกันที่มี "desc" จะใช้เวลาประมาณ 0 ms: select top 1 EventID …

1
การรันเคียวรีขนาดใหญ่บนฐานข้อมูลรองในกลุ่มความพร้อมใช้งานจะส่งผลต่อประสิทธิภาพของธุรกรรมในฐานข้อมูลหลักหรือไม่
ฉันต้องการให้ข้อมูลตามเวลาจริงหรือเกือบตามเวลาจริงสำหรับการรายงาน SSRS และ Tableau ฉันไม่ต้องการให้ระบบ OLTP ที่ใช้ในการผลิตได้รับผลกระทบทางลบจากการสืบค้นที่ใช้เวลานาน การรันเคียวรีขนาดใหญ่บนฐานข้อมูลรองในกลุ่มความพร้อมใช้งานจะส่งผลต่อประสิทธิภาพของธุรกรรมในฐานข้อมูลหลักหรือไม่

2
SQL Server: เราควรใช้ TCP หรือ Named Pipes หรือใช้ค่าเริ่มต้นหรือไม่
เมื่อเชื่อมต่อกับ SQL Server 2008 R2 จากแอปพลิเคชันไคลเอนต์. NET 4 บนเซิร์ฟเวอร์ที่แตกต่างกันใน LAN เดียวกันคุณสามารถตั้งค่าโปรโตคอลเครือข่ายที่แตกต่างกันสามแบบ: TCP ท่อที่มีชื่อ อย่าตั้งค่าใด ๆ ในสตริงการเชื่อมต่อและใช้ค่าเริ่มต้น แนวปฏิบัติที่ดีที่สุดคืออะไร? จะเลือกอะไรดี? ข้อมูลเพิ่มเติม: ทั้ง TCP และเนมไปป์มีการเปิดใช้งานทั้งบนเซิร์ฟเวอร์และไคลเอนต์ แอปพลิเคชันใช้การจำลองฐานข้อมูล ไคลเอ็นต์และเซิร์ฟเวอร์สื่อสารผ่าน LAN ที่รวดเร็ว เรากำลังตรวจสอบสิ่งนี้เพราะเรามีปัญหาการเชื่อมต่อและการหมดเวลาที่หายากและไม่จริง (แต่ไม่ว่าฉันต้องการรู้วิธีปฏิบัติที่ดีที่สุด) มีบทความเกี่ยวกับเรื่องนี้ใน MSDNแต่มันเป็นเรื่องทั่วไปและคลุมเครือ ไม่แนะนำหรือแนะนำสิ่งที่มีประโยชน์

6
ข้อผิดพลาด“ ช่วงเวลาหมดเวลาล็อคคำขอเกิน” เมื่อพยายามดูลำดับชั้นฐานข้อมูล
ฉันมีปัญหากับฐานข้อมูล ฉันสามารถเรียกใช้แบบสอบถามพื้นฐานแม้จะช้ากว่าปกติมาก เมื่อฉันพยายามที่จะดูต้นไม้ลำดับชั้นสำหรับตารางวิวหรือขั้นตอนใน SSMS วัตถุ Explorer lock request time out period exceededฉันได้รับ รายงาน SSRS ของฉันที่ทำงานกับวัตถุในฐานข้อมูลนี้ไม่เสร็จสมบูรณ์อีกต่อไป งานที่เกี่ยวข้องกับขั้นตอนการจัดเก็บในฐานข้อมูลนี้ยังไม่ได้ทำงาน ฉันพยายามใช้sp_who2เพื่อค้นหาและฆ่าการเชื่อมต่อทั้งหมดในฐานข้อมูลอย่างไรก็ตามวิธีนี้ไม่ได้แก้ปัญหา เกิดขึ้นที่นี่คืออะไร? ฉันจะแก้ไขปัญหานี้ได้อย่างไร

1
การค้นหาเวลาล่าสุดที่ตารางถูกอัพเดต
แบบสอบถาม: SELECT name AS TableName, create_date AS CreatedDate, modify_date as ModifyDate FROM sys.tables order by ModifyDate; ... จะบอกฉันว่าครั้งสุดท้ายที่มีการสร้างและแก้ไขตาราง (จากมุมมอง DDL) แต่ฉันต้องการทราบว่าข้อมูลจริงครั้งล่าสุดถูกแทรกหรือลบออกจากตาราง เป็นไปได้หรือไม่ที่จะได้รับสิ่งนี้ใน SQL Server

3
การลบระเบียนช้าเมื่อเปิดใช้งานทริกเกอร์
ความคิดนี้ได้รับการแก้ไขด้วยลิงก์ด้านล่าง - งานแก้ไข - แต่โปรแกรมแก้ไขไม่ได้ ทำงานกับฝ่ายสนับสนุนของ Microsoft เพื่อแก้ไขปัญหา http://support.microsoft.com/kb/2606883 ตกลงดังนั้นฉันมีปัญหาที่ฉันต้องการจะออกไป StackOverflow เพื่อดูว่ามีใครมีความคิด หมายเหตุนี่คือกับ SQL Server 2008 R2 ปัญหา: การลบ 3000 รายการจากตารางที่มีระเบียน 15000 รายการใช้เวลา 3-4 นาทีเมื่อเปิดใช้งานทริกเกอร์และเพียง 3-5 วินาทีเมื่อปิดการใช้งานทริกเกอร์ การตั้งค่าตาราง เราจะเรียกสองโต๊ะหลักและรอง มัธยมศึกษามีบันทึกรายการที่ฉันต้องการลบดังนั้นเมื่อฉันลบฉันเข้าร่วมในตารางรอง กระบวนการทำงานก่อนคำสั่งลบเพื่อเติมข้อมูลตารางรองที่มีระเบียนที่จะถูกลบ ลบคำชี้แจง: DELETE FROM MAIN WHERE ID IN ( SELECT Secondary.ValueInt1 FROM Secondary WHERE SECONDARY.GUID = '9FFD2C8DD3864EA7B78DA22B2ED572D7' ); ตารางนี้มีคอลัมน์จำนวนมากและดัชนี NC …

6
วิธีการวางหลายตารางด้วยคำนำหน้าทั่วไปในหนึ่งแบบสอบถาม?
ฉันใช้ Microsoft SQL Server 2008 คำถามของฉันคือ: จะวางหลายตารางด้วยคำนำหน้าทั่วไปในการค้นหาเดียวได้อย่างไร ชื่อตารางนั้น: LG_001_01_STLINE, LG_001_02_STFICHE

4
เหตุใดแบบสอบถามนี้จึงช้าลงอย่างมากเมื่อรวมไว้ใน TVF
ฉันมีคิวรีที่ค่อนข้างซับซ้อนซึ่งทำงานในเวลาเพียงไม่กี่วินาทีด้วยตัวเอง แต่เมื่อรวมกับฟังก์ชันที่มีค่าเป็นตารางมันจะช้ากว่ามาก ฉันไม่ได้ปล่อยให้มันจบ แต่มันวิ่งไปสิบนาทีโดยไม่จบ การเปลี่ยนแปลงเพียงอย่างเดียวคือการแทนที่ตัวแปรวันที่สองตัว (เริ่มต้นด้วยตัวอักษรวันที่) ด้วยพารามิเตอร์วันที่: ทำงานในเจ็ดวินาที DECLARE @StartDate DATE = '2011-05-21' DECLARE @EndDate DATE = '2011-05-23' DECLARE @Data TABLE (...) INSERT INTO @Data(...) SELECT... SELECT * FROM @Data ทำงานอย่างน้อยสิบนาที CREATE FUNCTION X (@StartDate DATE, @EndDate DATE) RETURNS TABLE AS RETURN SELECT ... SELECT * FROM X ('2011-05-21', '2011-05-23') …

2
เหตุใดการเพิ่มผู้ใช้ SQL Server ใน“ ดำเนินการบำรุงรักษาโวลุ่ม” จะช่วยเพิ่มความเร็วในการปรับขนาดฐานข้อมูลได้มาก?
ถ้าฉันต้องการสร้างฐานข้อมูล 5GB ด้วย CREATE DATABASE [test] CONTAINMENT = NONE ON PRIMARY ( NAME = N'test', FILENAME = N'E:\2012\test.mdf' , SIZE = 5529600KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'test_log', FILENAME = N'E:\2012\test_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) ใช้เวลา1 นาทีบน SSD ของฉัน แต่เมื่อฉันเพิ่มผู้ใช้ SQL …

1
การแก้ไขการหยุดชะงักจาก 2 ตารางเกี่ยวข้องเฉพาะผ่านมุมมองที่จัดทำดัชนี
ฉันมีสถานการณ์ที่กำลังหยุดชะงักและฉันคิดว่าฉัน จำกัด ผู้กระทำผิด แต่ฉันไม่แน่ใจว่าฉันจะทำอะไรได้บ้างเพื่อแก้ไข นี่คือสภาพแวดล้อมการผลิตที่ใช้ SQL Server 2008 R2 เพื่อให้คุณเข้าใจสถานการณ์ได้ง่ายขึ้น: ฉันมี 3 ตารางตามที่กำหนดไว้ด้านล่าง: TABLE activity ( id, -- PK ... ) TABLE member_activity ( member_id, -- PK col 1 activity_id, -- PK col 2 ... ) TABLE follow ( id, -- PK follower_id, member_id, ... ) member_activityตารางมีสารประกอบหลักสำคัญกำหนดเป็นmember_id, activity_idเพราะฉันเท่านั้นที่เคยต้องดูข้อมูลในตารางที่ว่าวิธีการ ฉันยังมีดัชนี nonclustered …

2
ใน SQL Server ล็อคการอ่านทำงานอย่างไร
สมมติว่าฉันมีคิวรีที่ใช้เวลานานต่อไปนี้ UPDATE [Table1] SET [Col1] = 'some value' WHERE [Col2] -- some clause which selects thousands of rows และสมมติว่ามีการดำเนินการค้นหาต่อไปนี้ขณะที่แบบสอบถามด้านบนทำงานอยู่ SELECT * FROM [Table1] แบบสอบถามแรกป้องกันไม่ให้แบบสอบถามที่สองทำงานจนกว่าแบบสอบถามแรกจะเสร็จสมบูรณ์หรือไม่ ถ้าใช่คิวรีแรกจะป้องกันไม่ให้คิวรีที่สองทำงานในแถวทั้งหมดหรือเฉพาะแถวที่เกี่ยวข้องในส่วนคำสั่ง WHERE หรือไม่ แก้ไข: สมมติว่าแบบสอบถามที่สองคือ SELECT [Col1], [Col2] FROM [Table1] WHERE [Col2] -- some clause whose matching elements overlap those from -- the clause in the …

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