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

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

1
คีย์หลักคอมโพสิตในฐานข้อมูล SQL Server แบบหลายผู้เช่า
ฉันกำลังสร้างแอพหลายผู้เช่า (ฐานข้อมูลเดียวสกีมาเดียว) โดยใช้ ASP Web API, Entity Framework และฐานข้อมูล SQL Server / Azure แอปนี้จะใช้งานโดยลูกค้า 1,000-5,000 คน ตารางทั้งหมดจะมีฟิลด์TenantId(Guid / UNIQUEIDENTIFIER) ตอนนี้ฉันใช้คีย์หลักของฟิลด์เดียวซึ่งเป็นรหัส (Guid) แต่ด้วยการใช้เพียงแค่รหัสเขตข้อมูลฉันต้องตรวจสอบว่าข้อมูลที่ให้โดยผู้ใช้นั้นมาจาก / สำหรับผู้เช่าที่เหมาะสมหรือไม่ ตัวอย่างเช่นฉันมีSalesOrderตารางที่มีCustomerIdเขตข้อมูล ทุกครั้งที่ผู้ใช้โพสต์ / อัปเดตคำสั่งขายฉันต้องตรวจสอบว่าCustomerIdมาจากผู้เช่ารายเดียวกันหรือไม่ แย่ลงเพราะผู้เช่าแต่ละรายอาจมีหลายสาขา แล้วฉันจะมีการตรวจสอบและTenantId OutletIdมันเป็นฝันร้ายของการบำรุงรักษาและไม่ดีต่อประสิทธิภาพ ฉันคิดว่าจะเพิ่มไปยังคีย์หลักพร้อมกับTenantId Idและอาจเพิ่มOutletIdด้วย ดังนั้นหลักสำคัญในSalesOrderตารางจะเป็น: Id, และTenantId OutletIdข้อเสียของวิธีการนี้คืออะไร? ประสิทธิภาพจะเจ็บอย่างรุนแรงโดยใช้คีย์ผสมหรือไม่ คีย์ใบสั่งผสมมีความสำคัญหรือไม่ มีวิธีแก้ปัญหาที่ดีกว่าสำหรับฉันหรือไม่?


3
กำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ที่ทำให้ประสิทธิภาพการทำงานช้าลง
ฉันจะกำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ในแผนปฏิบัติการได้อย่างไร ตารางtblQuotesมีดัชนีแบบคลัสเตอร์ (เปิดQuoteID) และดัชนีที่ไม่ได้คลัสเตอร์27 รายการดังนั้นฉันจึงพยายามไม่สร้างอีกต่อไป ฉันวางคอลัมน์ดัชนีแบบคลัสเตอร์QuoteIDในแบบสอบถามของฉันโดยหวังว่าจะช่วยได้ แต่ก็ยังเหมือนเดิม แผนการดำเนินการที่นี่ หรือดูมัน: นี่คือสิ่งที่ผู้ดำเนินการค้นหาคีย์พูดว่า: ค้นหา: declare @EffDateFrom datetime ='2017-02-01', @EffDateTo datetime ='2017-08-28' SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data CREATE TABLE #Data ( QuoteID int NOT NULL, --clustered index [EffectiveDate] [datetime] NULL, …

2
ห่วงโซ่ใบรับรองที่ออกโดยหน่วยงานที่ไม่น่าเชื่อถือ
เมื่อไม่นานมานี้ฉันติดตั้ง SQL Server 2016 Developer Edition ในสภาพแวดล้อมของ Windows 10 Home Edition ( แล็ปท็อปต้องแม่นยำ ) และทุกอย่างเรียบร้อยดี แล้วใครบางคน - ผู้ดูแลระบบในกล่อง - ตัดสินใจโดยไม่บอกฉันเพื่อเปลี่ยนชื่อกล่องดังกล่าว หลังจากนั้นเมื่อพยายามเชื่อมต่อกับเซิร์ฟเวอร์ SQL เราพบข้อความแสดงข้อผิดพลาดต่อไปนี้: นี่เป็นคำถามที่คล้ายกันมากสำหรับคำถามนี้: “ ห่วงโซ่ใบรับรองออกโดยหน่วยงานที่ไม่น่าเชื่อถือ” เมื่อเชื่อมต่อฐานข้อมูลในบทบาทของ VM จากเว็บไซต์ Azure ฉันเคยมาที่นี่ด้วย: ชื่อหลักเป้าหมายไม่ถูกต้อง ไม่สามารถสร้างบริบท SSPI (Microsoft SQL Server ข้อผิดพลาด: 0) และฉันใช้ Kerberos Configuration Manager ซึ่งทำให้ฉันมีข้อผิดพลาดที่แตกต่างกัน ฉันควรจะบอกว่าฉันสามารถเชื่อมต่อกับอินสแตนซ์นี้ของเซิร์ฟเวอร์ SQL โดยการรับรองความถูกต้องของเซิร์ฟเวอร์ SQLแต่ฉันต้องการเชื่อมต่อโดยใช้การพิสูจน์ตัวจริงของ windows เพียงเพื่อให้ชัดเจน …

1
SQL Server - ถ้าลอจิกในขั้นตอนการจัดเก็บและแคชแผน
มาตรฐาน SQL Server 2012 และ 2016: ถ้าฉันใส่if-elseลอจิกในโพรซีเดอร์ที่เก็บไว้เพื่อรันโค้ดหนึ่งในสองสาขาขึ้นอยู่กับค่าของพารามิเตอร์เอ็นจินแคชจะเป็นเวอร์ชันล่าสุดหรือไม่? และถ้าในการประมวลผลต่อไปนี้ค่าของพารามิเตอร์จะเปลี่ยนแปลงมันจะทำการคอมไพล์และแคชกระบวนการที่เก็บไว้ใหม่อีกครั้งเนื่องจากจะต้องทำการประมวลผลรหัสสาขาอื่นหรือไม่ (แบบสอบถามนี้ค่อนข้างแพงในการรวบรวม)

1
มีหน่วยความจำระบบไม่เพียงพอในกลุ่มทรัพยากร 'ภายใน' เพื่อเรียกใช้แบบสอบถามนี้
หนึ่งในเซิร์ฟเวอร์การผลิตของเรากำลังรายงานข้อผิดพลาดในบันทึก ข้อผิดพลาด: 701, ความรุนแรง: 17, สถานะ: 123 มีหน่วยความจำระบบไม่เพียงพอในกลุ่มทรัพยากร 'ภายใน' เพื่อเรียกใช้แบบสอบถามนี้ ฉันค้นหาข้อผิดพลาดนี้และพบว่าเป็นข้อผิดพลาดและมี Hot fix พร้อม Service Pack 2 นี่คือรายละเอียดของเซิร์ฟเวอร์: Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 Standard Edition (64 บิต) จำนวนโปรเซสเซอร์: 24 (มี 2 โหนด NUMA แต่ละแห่งมี 12 คอร์) หน่วยความจำ: RAM 24GB จัดสรรสำหรับ SQL Server Query Batchload / ขั้นต่ำ: 5,000+ …

4
เมื่อใดที่มีการเปิดใช้งานการตรวจสอบและตรวจสอบหน้าฉีกขาดกับ SQL Server และพฤติกรรมการอัพเกรดคืออะไร
มีสองตัวเลือกที่แตกต่างกันใน SQL Server ที่ทันสมัยสำหรับการตรวจสอบหน้า; ถูกฉีกหน้าตรวจสอบและตรวจสอบผลรวม ไม่มีตัวเลือกแน่นอน ฉันเชื่อว่าChecksumถูกนำมาใช้ใน SQL Server 2005 และการอัปเกรดหรือการกู้คืนฐานข้อมูลจากเวอร์ชันก่อนหน้านั้นจะคงไว้ซึ่งวิธีการตรวจสอบหน้าก่อนหน้า เช่นไม่มีการอัพเกรดโดยนัย ปัญหาที่เกี่ยวข้องคือเรามีฐานข้อมูลการผลิตที่นำไปผลิตโดยใช้ SQL Server 2000 และย้ายไปยังเซิร์ฟเวอร์ SQL Server 2008 R2 หน้าตรวจสอบการตั้งค่าเพื่อไม่เมื่อฉันได้รับการคาดหวังว่ามันจะได้รับการขาดการตรวจสอบหน้า ย้อนกลับไปตามระยะเวลาที่เราดูเหมือนว่าฐานข้อมูลนี้ได้รับการพัฒนาใน SQL Server 7.0 แล้วย้ายไปยัง SQL Server 2000 และนี่อาจอธิบายผลลัพธ์ที่สังเกตได้ ฉันสงสัยว่าเมื่อTorn Page DetectionและChecksumกลายเป็นคุณสมบัติของ SQL Server และวิธีการทำงานเมื่อทำการโยกย้ายหรืออัปเกรดเป็นเวอร์ชันที่ใหม่กว่า แก้ไข: สรุปคำตอบบางส่วน: มีความแตกต่างเล็กน้อยในบางวันเมื่อ Torn Page Detection มาใน SQL Server ลิงก์ 1: http://support.microsoft.com/kb/230785 ลิงก์ …
15 sql-server 

1
ปัจจัยการคิดต้นทุนใดที่ไปสู่เครื่องมือเพิ่มประสิทธิภาพที่เลือกสปูประเภทต่าง ๆ
Spoolum ใน SQL Server มี spools หลายชนิด ทั้งสองที่ฉันสนใจเป็นตารางที่เก็บพักและดัชนีหลอด , ด้านนอกของคำสั่งการปรับเปลี่ยน อ่านเฉพาะแบบสอบถามโดยเฉพาะอย่างยิ่งที่ด้านในของการเข้าร่วมลูปซ้อนอาจใช้สปูลของตารางหรือดัชนีเพื่อลด I / O และอาจปรับปรุงประสิทธิภาพของคิวรี หลอดเหล่านี้สามารถกระตือรือร้นหรือขี้เกียจ เหมือนคุณและฉัน คำถามของฉันคือ: ปัจจัยใดที่นำไปสู่การเลือกของตารางเทียบกับดัชนี Spool ปัจจัยใดที่เป็นตัวเลือกระหว่าง Eager และ Lools Spools

5
วิธีเพิ่ม 1 มิลลิวินาทีในสตริงวันที่และเวลา
จากการเลือกฉันสามารถส่งคืนแถว x แบบนี้: 1 2019-07-23 10:14:04.000 1 2019-07-23 10:14:11.000 2 2019-07-23 10:45:32.000 1 2019-07-23 10:45:33.000 เรามีมิลลิวินาทีทั้งหมดที่มี 0 มีวิธีเพิ่ม 1 ต่อ 1 มิลลิวินาทีหรือไม่ดังนั้นการเลือกจะเป็นดังนี้: 1 2019-07-23 10:14:04.001 1 2019-07-23 10:14:11.002 2 2019-07-23 10:45:32.003 1 2019-07-23 10:45:33.004 ฉันกำลังพยายามสร้างเคอร์เซอร์หรือแม้แต่การอัปเดตที่ไม่สำเร็จ นี่คือแบบสอบถามเพื่อให้ได้ผลลัพธ์ที่ฉันต้องการ: select top 10 ModifiedOn from [SCHEMA].[dbo].[TABLE] where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59' …

1
เพรดิเคตของ SARGable จะถูกผลักลงใน CTE หรือตารางที่ได้รับ
กระสอบทราย ขณะที่การทำงานในบล็อกด้านคุณภาพPosts®ฉันมาข้ามบางพฤติกรรมเพิ่มประสิทธิภาพผมพบว่ามันโกรธที่น่าสนใจ ฉันไม่มีคำอธิบายในทันทีอย่างน้อยก็ไม่มีใครมีความสุขดังนั้นฉันวางไว้ที่นี่ในกรณีที่มีคนฉลาดปรากฏขึ้น ถ้าคุณต้องการที่จะทำตามที่คุณสามารถคว้า 2013 รุ่นของการถ่ายโอนข้อมูลกองมากเกินที่นี่ ฉันใช้ตารางความคิดเห็นโดยมีดัชนีเพิ่มเติมหนึ่งรายการ CREATE INDEX [ix_ennui] ON [dbo].[Comments] ( [UserId], [Score] DESC ); คำค้นหาหนึ่ง เมื่อผมสอบถามตารางเช่นดังนั้นฉันได้รับแผนแบบสอบถามแปลก WITH x AS ( SELECT TOP 101 c.UserId, c.Text, c.Score FROM dbo.Comments AS c ORDER BY c.Score DESC ) SELECT * FROM x WHERE x.Score >= 500; เพรดิเคต SARGable บนคะแนนไม่ได้ถูกผลักเข้าไปใน CTE …

3
SQL Server เปลี่ยนโครงสร้าง XML เมื่อแทรก
ฉันกำลังแทรกข้อมูล XML บางอย่างไปยังคอลัมน์ XML ใน SQL server แต่หลังจากที่แทรกข้อมูลแล้วมันก็ถูกเปลี่ยนแปลงโดยเซิร์ฟเวอร์ sql นี่คือข้อมูลที่ฉันใส่ <xsl:value-of select="name/n/given" /> <xsl:text> </xsl:text> <xsl:value-of select="name/n/family" /> เมื่อฉันอ่านมันกลับมาดูเหมือนว่านี้ <xsl:value-of select="name/n/given" /> <xsl:text /> <xsl:value-of select="name/n/family" /> ใส่ใจกับบรรทัดที่สอง นี่เป็นปัญหาเนื่องจากจะเปลี่ยนวิธีที่เอาต์พุตการแปลง XSLT จะเป็น ตัวอย่างแรกจะสร้างช่องว่างระหว่างชื่อที่ให้และชื่อสกุลในขณะที่สองจะไม่สร้างช่องว่างใด ๆ ดังนั้นมันจะเป็นเหมือน JohnJohnsen ในขณะที่คนแรกจะเป็นเหมือน John Johnsen มีวิธีแก้ปัญหานี้ไหม?
15 sql-server  xml 

5
ความพยายามในการเรียกคืนพื้นที่ที่ไม่ได้ใช้ทำให้พื้นที่ใช้งานเพิ่มขึ้นอย่างมากใน SQL Server
ฉันมีตารางในฐานข้อมูลการผลิตที่มีขนาด 525 GB ซึ่งไม่ได้ใช้ 383 GB: ฉันต้องการเรียกคืนพื้นที่บางส่วนนี้ แต่ก่อนที่จะยุ่งกับฐานข้อมูลการผลิตฉันกำลังทดสอบกลยุทธ์บางอย่างในตารางที่เหมือนกันในฐานข้อมูลทดสอบที่มีข้อมูลน้อยลง ตารางนี้มีปัญหาที่คล้ายกัน: ข้อมูลบางอย่างเกี่ยวกับตาราง: ปัจจัยเติมถูกตั้งค่าเป็น 0 มีประมาณ 30 คอลัมน์ หนึ่งในคอลัมน์คือ LOB ของรูปภาพประเภทและมันจัดเก็บไฟล์ที่มีขนาดตั้งแต่ไม่กี่ KB ถึงหลายร้อย MB ตารางนี้ไม่มีดัชนีสมมุติฐานที่เกี่ยวข้อง เซิร์ฟเวอร์กำลังเรียกใช้ SQL Server 2017 (RTM-GDR) (KB4505224) - 14.0.2027.2 (X64) ฐานข้อมูลใช้SIMPLEโมเดลการกู้คืน บางสิ่งที่ฉันได้ลอง: ALTER INDEX ALL ON dbo.MyTable REBUILDสร้างใหม่ดัชนี: สิ่งนี้มีผลกระทบเล็กน้อย ALTER INDEX ALL ON dbo.MyTable REORGANIZE WITH(LOB_COMPACTION = ON)จัดระเบียบดัชนี: สิ่งนี้มีผลกระทบเล็กน้อย …

2
SQL Server 2017 ที่มีฐานข้อมูล 500 - AG บ่อยครั้งตัดการเชื่อมต่อตั้งแต่ CU9
สวัสดีทุกคนและขอขอบคุณล่วงหน้าสำหรับความช่วยเหลือของคุณ เรากำลังเผชิญกับความท้าทายกับกลุ่มความพร้อมใช้งานของ SQL Server 2017 พื้นหลัง บริษัท เป็นซอฟต์แวร์ back-end B2B สำหรับการค้าปลีก ประมาณ 500 ฐานข้อมูลผู้เช่ารายเดียวและ 5 ฐานข้อมูลที่ใช้ร่วมกันที่ใช้โดยผู้เช่าทั้งหมด ส่วนใหญ่จะอ่านคุณสมบัติของเวิร์กโหลดและฐานข้อมูลส่วนใหญ่มีกิจกรรมต่ำมาก เซิร์ฟเวอร์การผลิตจริงที่โฮสต์ที่ co-location เพิ่งได้รับการอัพเกรดจาก SQL Server 2014 Enterprise บน Windows Server 2012 ในการกำหนดค่า SAN / FCI ที่ใช้ร่วมกันไปเป็น SQL Server 2017 Enterprise บน Windows Server 2016 บน 2 socket / 32 core / 768 GB …

2
เวลารอจะสูงกว่าเวลานาฬิกาได้อย่างไร
เมื่อฉันกำลังติดตามด้วย sp_BlitzFirst ฉันจะได้รับรายละเอียดนี้: <?ClickToSeeDetails -- For 20 seconds over the last 5 seconds, SQL Server was waiting on this particular bottleneck. -- ?> ควรที่จะอ่าน "20 ครั้งในช่วง 5 วินาทีที่ผ่านมา?" การค้นหาคือ CLR_SEMAPHORE

3
SQL Server: วิธีการปิดการใช้งานทริกเกอร์สำหรับการปรับปรุงสำหรับเซสชั่นปัจจุบันของคุณเท่านั้น?
ฉันกำลังทำงานกับ SQL Server 2008 R2 ผมมีตารางผลประโยชน์ที่มีหลัง INSERT, UPDATE ทริกเกอร์ชื่อtiu_benefit ฉันต้องการเขียนคำสั่ง UPDATE สำหรับตารางนี้เพื่ออัปเดต 1 แถว แต่ฉันไม่ต้องการให้ทริกเกอร์เริ่มทำงาน ฉันรู้ว่าฉันสามารถปิดการใช้งานทริกเกอร์ก่อน UPDATE แล้วเปิดใช้ทริกเกอร์หลัง UPDATE: DISABLE TRIGGER tiu_benefit ON benefit; GO UPDATE benefit SET editor = 'srh' where benefit_id = 9876 GO ENABLE TRIGGER tiu_benefit ON benefit; GO แต่สิ่งนี้จะปิดการใช้งานและเปิดใช้งานทริกเกอร์จะส่งผลกระทบต่อผู้ใช้ทั้งหมดที่เข้าสู่ระบบในปัจจุบัน ดังนั้นจึงมีความเป็นไปได้ที่ผู้ใช้รายอื่นเรียกใช้ UPDATE / INSERT ในขณะที่ทริกเกอร์ถูกปิดใช้งานโดยสคริปต์ของฉันซึ่งไม่ดี นั่นเป็นเหตุผลที่ฉันต้องการปิดใช้งานและเปิดใช้งานทริกเกอร์สำหรับเซสชันปัจจุบันของฉันเท่านั้น เป็นไปได้ไหม? …

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