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

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

2
SSRS จะสูญพันธุ์เร็ว ๆ นี้และ PowerBI เป็นรุ่นใหม่หรือไม่
ฉันอ่าน SQL Server 2017 จะรวม PowerBI Server แล้ว พวกเขายังย้าย SSRS ไปยังตัวติดตั้งที่แตกต่างกันดังนั้นจึงจะไม่ได้รับการทำแพคเกจในการติดตั้ง SQL Server ดั้งเดิม นี่หมายความว่า Microsoft จะพยายามเลิกใช้ SSRS ในที่สุดหรือไม่ ทีมของเราควรพยายามสร้างรายงานใหม่ใน PowerBI และเปลี่ยนรายงาน SSRS ก่อนหน้าหรือไม่

1
สร้างดัชนีออฟไลน์ใหม่บนตารางที่แบ่งพาร์ติชัน
ถ้าฉันตารางพาร์ทิชันด้วยntext, textหรือimageประเภทข้อมูลและสร้างดัชนีบนพาร์ติชันเดียวที่มีonline = offไม่ว่าล็อคตารางทั้งหมดหรือเพียงแค่พาร์ทิชันในคำถาม?

1
sp_cursorprepexec ทำให้ 53 ล้านอ่าน?
เรากำลังเรียกใช้การติดตั้ง Dynamics AX 2012 ด้วย SQL Server 2012 ฉันรู้ว่าเคอร์เซอร์ไม่ควรใช้อีกต่อไป แต่ AX กำลังใช้มันและเราไม่สามารถเปลี่ยนพฤติกรรมนี้ดังนั้นเราจึงต้องทำงานกับมัน วันนี้ฉันได้รับข้อความค้นหาที่แย่มากโดยมีผู้อ่านมากกว่า 53 ล้านคนและเวลาดำเนินการมากกว่า 20 นาที ฉันตรวจสอบข้อความค้นหานี้ผ่านเครื่องมือตรวจสอบของเรา SentryOne declare @p1 int set @p1=1073773227 declare @p2 int set @p2=180158805 declare @p5 int set @p5=16 declare @p6 int set @p6=1 declare @p7 int set @p7=2 exec sp_cursorprepexec @p1 output,@p2 output,N'@P1 bigint,@P2 …

1
การเปลี่ยนการตั้งค่าหน่วยความจำสูงสุดจะทำให้แผนการค้นหาไม่ถูกต้องหรือไม่
ฉันเพิ่งลดหน่วยความจำสูงสุดจากค่าเริ่มต้น (ไม่ จำกัด ) ลงเหลือ 20 GB สิ่งนี้ลบข้อความค้นหาที่เก่าที่สุดในแคชแผนหรือไม่

1
เหตุใดการลบในมุมมองที่พาร์ติชันของฉันจึงทำให้การแทรกดัชนีแบบกลุ่ม?
ฉันมีมุมมองที่แบ่งพาร์ติชันซึ่งมีทริกเกอร์แทรกด้านล่าง (พาร์ติชัน Mans ไม่ดี) เมื่อฉันทำการลบฉันได้รับแผนแบบสอบถามด้านล่าง: delete from factproductprice where pricedate = '20170725' ทริกเกอร์ในมุมมอง: ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice] INSTEAD OF DELETE AS BEGIN IF @@ROWCOUNT = 0 RETURN; DECLARE @PriceDate DATE SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED IF @PriceDate BETWEEN '20140101' AND '20141231' BEGIN DELETE FROM dbo.FactProductPrice2014 WHERE …

3
เข้าร่วมด้วยตนเองในคีย์หลัก
พิจารณาคำถามนี้ซึ่งประกอบด้วยการรวมNตัวเอง: select t1.* from [Table] as t1 join [Table] as t2 on t1.Id = t2.Id -- ... join [Table] as tN on t1.Id = tN.Id มันสร้างแผนการดำเนินการด้วยการสแกนดัชนี N คลัสเตอร์และการรวม N-1 ผสาน สุจริตฉันไม่เห็นเหตุผลใด ๆ ที่จะไม่เพิ่มประสิทธิภาพการเข้าร่วมทั้งหมดและทำการสแกนดัชนีแบบคลัสเตอร์เดียวเพียงครั้งเดียวนั่นคือปรับการค้นหาดั้งเดิมให้เหมาะกับสิ่งนี้: select t1.* from [Table] as t1 คำถาม เหตุใดการรวมจึงไม่ได้รับการปรับให้เหมาะสม มันไม่ถูกต้องทางคณิตศาสตร์หรือไม่ที่จะบอกว่าการเข้าร่วมทุกครั้งไม่เปลี่ยนชุดผลลัพธ์ ทดสอบเมื่อ: เซิร์ฟเวอร์ต้นทางรุ่น: SQL Server 2014 (12.0.4213) Source Database …

1
ข้อความแบบเต็ม: FT_MASTER_MERGE จำนวนมากรอสถานะ SUSPENDED หลังจากสร้างดัชนีข้อความแบบเต็มหลายรายการ (เซิร์ฟเวอร์หยุดทำงาน)
เราทำการทดสอบบน SQL Server 2014 เมื่อเรามี 10 ฐานข้อมูล 100 schema ที่แตกต่างกันในแต่ละฐานข้อมูล 10 ตาราง (~ 50 แถว) ตารางเล็ก ๆ ในแต่ละ schema (ดังนั้น 10K ตารางทั้งหมด) และเราสร้างดัชนีข้อความทั้งหมดในสิ่งเหล่านี้ ตารางในฐานข้อมูลเหล่านี้ทั้งหมดพร้อมกัน ในหลายนาทีเราพบว่า SQL Server หยุดการยอมรับการเชื่อมต่อใด ๆ (ยกเว้นADMIN:.การเชื่อมต่อ) หากเรารีสตาร์ทเซิร์ฟเวอร์เราสามารถเชื่อมต่อได้ แต่ในบางครั้งมันก็หยุดทำงานอีกครั้ง หลังจากการตรวจสอบบางอย่างเราพบว่ามันเกิดจากการบริโภคกระทู้ทำงานทั้งหมดdm_os_tasksและdm_os_waiting_tasksแสดงให้เราเห็นว่ามีสถานะFT_MASTER_MERGEรออยู่SUSPENDEDมากมาย เรา googled ว่า "ข้อความแบบเต็มกำลังรอการดำเนินการผสานหลัก" แต่ไม่พบข้อมูลที่แท้จริงอีกต่อไป เราลองกำหนดค่าแคตตาล็อกข้อความเต็มรูปแบบที่แตกต่างกัน: หนึ่งแคตตาล็อกต่อ DB, หนึ่งแค็ตตาล็อกต่อสคีมา, หนึ่งแคตตาล็อกต่อดัชนี อย่างไรก็ตามเซิร์ฟเวอร์หยุดทำงานกับงานที่ถูกระงับเหล่านี้ทั้งหมด อะไรคือสาเหตุของการรอคอยสิ่งนี้สามารถแก้ไข / บรรเทาได้อย่างไร และอะไรคือวิธีที่แนะนำในการเปิดใช้งานข้อความแบบเต็มบนตารางจำนวนมากเช่นนี้

2
แผนแบบสอบถามส่วนใหญ่สร้างขึ้นใหม่ใน 4 ชั่วโมงที่ผ่านมา
ฉันมีปัญหากับประสิทธิภาพของฐานข้อมูล SQL Server ของฉัน ฉันได้พบเครื่องมือนี้sp_BlitzCache หลังจากรันคำสั่งฉันได้รับข้อความนี้: คุณมีแผนสร้าง 92.00% ใน 24 ชั่วโมงที่ผ่านมาและสร้างขึ้น 92.00% ใน 4 ชั่วโมงที่ผ่านมา ขณะที่ฉันระบุปัญหา (โดยใช้ SQL Server Profiler ฉันได้ตรวจสอบเหตุการณ์ที่เกิดขึ้นของ StmtRecompile) ฉันสามารถค้นหาข้อความค้นหาแบบเต็มเพียงไม่กี่คำที่สร้างขึ้นมาใหม่บ่อยครั้ง อย่างไรก็ตามข้อความค้นหาแบบเต็มจะแสดงเพียง 5% ของคำค้นหาทั้งหมด คุณมีข้อเสนอแนะอะไรบ้างที่อาจทำให้แผนพักผ่อนที่เหลืออยู่ 87% เป็นไปได้? ฉันมี SQL Server 2012 (รุ่น 11.0.6567.0) แก้ไข: ฉันเพิ่มเคาน์เตอร์วัดประสิทธิภาพแล้ว +---------------------------+--------------------------------+--------------+ | object_name | counter_name | cntr_value | +---------------------------+--------------------------------+--------------+ | SQLServer:Buffer Manager | …

2
ทราฟฟิกเครือข่ายเข้ารหัสเมื่อทำการสำรองข้อมูลระยะไกลโดยใช้ SQL Server TDE หรือไม่
พวกเขาบอกว่าไม่มีสิ่งเช่น "คำถามโง่ ๆ " ดังนั้นที่นี่จะไป: ฉันเข้าใจว่า SQL Server Transparent Data Encryption (TDE) เข้ารหัสข้อมูลที่เหลือเพื่อให้ไฟล์ฐานข้อมูลของคุณ (.mdf) และไฟล์สำรองของคุณ (.bak) ได้รับการเข้ารหัสหากมีคนบุกเข้าไปในที่เก็บของคุณและขโมยไฟล์เหล่านั้น ฉันยังเข้าใจว่าข้อมูลถูกถอดรหัสเมื่ออ่านจากดิสก์เพื่อให้ไม่ได้เข้ารหัสในหน่วยความจำ (ขณะเคลื่อนไหว) ดังนั้นข้อมูลที่ร้องขอโดยผู้ใช้ที่เรียกใช้แบบสอบถามระยะไกล (เลือก * จาก SensitiveData) จะไม่ถูกเข้ารหัสเมื่อเดินทางผ่านเครือข่ายจึงมีความเสี่ยงที่จะถูกดักข้อมูล ดังนั้นสมมติว่าทั้งหมดข้างต้นถูกต้องนี่คือคำถามโง่ของฉัน: ถ้าอินสแตนซ์ SQL Server ของฉันอยู่ในคอมพิวเตอร์ A และการสำรองข้อมูลฐานข้อมูล TDE ของฉันจะถูกตัดออกไปที่จัดเก็บในคอมพิวเตอร์ระยะไกล B เป็นข้อมูลการดำเนินการสำรองข้อมูล คอมพิวเตอร์ A ที่จะเขียนไปยังดิสก์ที่คอมพิวเตอร์ B? ฉันคิดว่ามันจะต้องเป็น (เพราะฉันคิดว่าการดำเนินการเข้ารหัสเกิดขึ้นบนคอมพิวเตอร์ A ก่อน) แต่ฉันไม่สามารถหาคำยืนยันได้ในเอกสารใด ๆ ของ Microsoft หรือในบล็อก ในระหว่างการดำเนินการกู้คืน …

3
DISTINCT ในหนึ่งคอลัมน์และกลับแถวบนสุด
คุณค้นหาลูกค้าที่ไม่ซ้ำใครสามรายที่มีจำนวนมากที่สุดได้Purchase_Costอย่างไร ฉันต้องการใช้DISTINCTเฉพาะในCustomer_Nameแต่แบบสอบถามด้านล่างใช้ความแตกต่างในคอลัมน์ทั้งสาม ฉันจะปรับเปลี่ยนแบบสอบถามเพื่อให้ได้ผลลัพธ์ที่ต้องการได้อย่างไร SELECT DISTINCT TOP 3 customer_name, order_no, Purchase_Cost FROM PurchaseTable ORDER BY Purchase_Cost

1
ไม่สามารถตัดทอนบันทึกธุรกรรม log_reuse_wait_desc - AVAILABILITY_REPLICA
เช้านี้ฉันตื่นขึ้นมาด้วยการทำธุรกรรมบันทึกการแจ้งเตือนอย่างเต็มรูปแบบในหนึ่งในฐานข้อมูลของเรา เซิร์ฟเวอร์นี้เป็นคลัสเตอร์ alwayson และยังเป็นสมาชิกการจำลองแบบของทรานแซคชัน ฉันตรวจสอบ log_reuse_wait_desc และพบว่ามีการสำรองข้อมูล มีคนปิดการใช้งานการสำรองข้อมูลโดยไม่ตั้งใจ 4 วันก่อนหน้าฉันเปิดใช้งานงานสำรองข้อมูลบันทึกอีกครั้งและบันทึกถูกล้าง ตั้งแต่ 4 โมงเช้าฉันคิดว่าฉันจะไปทำงานในภายหลังในเช้าวันนั้นและปัดท่อนไม้ตามที่มันโตขึ้นเป็น 400GB 10:00 น. - ฉันอยู่ในสำนักงานและฉันตรวจสอบการใช้งานบันทึกก่อนที่จะย่อขนาดลงและประมาณ 16% ฉันประหลาดใจและตรวจสอบ log_reuse_wait_desc ซึ่งแสดงการจำลองแบบ ฉันสับสนเพราะนี่เป็นสมาชิกการจำลองแบบ จากนั้นเราเห็นว่า db ถูกเปิดใช้งานสำหรับ CDC และคิดว่าอาจเป็นสาเหตุ CDC ที่ถูกปิดใช้งานและตอนนี้ log_reuse_wait_desc แสดง AVAILABILITY_REPLICA การใช้งานบันทึกในขณะที่ยังคงเติบโตอย่างต่อเนื่องและที่ 17% ในขณะนี้ ฉันตรวจสอบแดชบอร์ด alwayson และตรวจสอบคิวที่ส่งและทำซ้ำและทั้งคู่นั้นแทบจะเป็นศูนย์ ฉันไม่แน่ใจว่าทำไมการใช้บันทึกซ้ำจึงแสดงเป็น AVAILABILITY_REPLICA และไม่สามารถล้างบันทึกได้ มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น?

1
ฉันควรคาดหวังอะไรจากข้อ จำกัด ขนาดใหญ่ของเซิร์ฟเวอร์ SQL ที่เชื่อมโยง
ผลิตภัณฑ์ของเราใช้ Microsoft SQL Server ขณะนี้เรากำลังใช้ฐานข้อมูลสามฐานและปรับใช้กับฐานข้อมูล SQL Server เดียวเสมอ ฐานข้อมูลที่สามคือ OLTP, OLAP และการตรวจสอบ ฐานข้อมูล OLAP มีข้อมูลขาเข้าขนาดใหญ่บน EOD จากทั้ง OLTP และการตรวจสอบโดยใช้การสืบค้นข้ามฐานข้อมูล คำถาม หากเราต้องปรับใช้ฐานข้อมูลทั้งสามนี้ไปยังอินสแตนซ์ Standard Edition สามแยกภายในเซิร์ฟเวอร์จริงและผูกเข้าด้วยกันโดยใช้คุณสมบัติเซิร์ฟเวอร์ที่เชื่อมโยงของ SQL Server: รหัสสมัครจะโปร่งใสแค่ไหน? ฉันควรคาดหวังการเปลี่ยนแปลงมากแค่ไหน? ข้อมูลขาเข้าของ OLAP มีจำนวนแถว 50k-100k, น้ำหนักบรรทุก 200-500MB ต่อ EOD ฉันควรคาดหวังว่าจะมีประสิทธิภาพลดลงเท่าใด สิ่งที่ฉันควรคาดหวังมาก ๆ พื้นหลัง ขณะนี้เรากำลังทอยลูกค้ารายแรกที่มีผู้ใช้มากกว่า 500 คนพร้อมกัน เรากำลังร่างข้อกำหนดเซิร์ฟเวอร์ซึ่งรวมถึง 64 คอร์และ RAM 256GB สำหรับ SQL …

3
สร้างค่าคงที่ระดับฐานข้อมูล (การแจงนับ) โดยไม่ใช้ CLR หรือไม่
ฉันมีวัตถุ SQL หลายอย่างที่ต้องดำเนินการทางเลือกอื่นตามสถานะที่ต้องการของคำขอ มีวิธีในการสร้างค่าคงที่ระดับฐานข้อมูล (การแจงนับ) ที่สามารถส่งผ่านไปยังกระบวนงานที่เก็บไว้ฟังก์ชันค่าตารางและใช้ในแบบสอบถาม (โดยไม่ต้องใช้ CLR) หรือไม่ CREATE PROCEDURE dbo.DoSomeWork(@param1 INTEGER, ..., @EnumValue myEnumType) AS ...; แล้วใช้มัน: EXEC doSomeWork 85, ..., (myEnumType.EnumValue1 + myEnumType.EnumValue2); ไหนmyEnumTypeจะเก็บค่าการแจงนับไม่กี่ ในขั้นตอนที่ฉันจะสามารถใช้@EnumValueและทดสอบกับค่าในmyEnumTypeการทำงานที่จำเป็น ฉันจะทำให้ค่าของmyEnumTypebitmask สำหรับกรณีที่ฉันกำลังพิจารณา สำหรับตัวอย่างง่ายๆให้พิจารณากระบวนการที่มีราคาแพงซึ่งใช้ชุดข้อมูลขนาดใหญ่และลดลงเป็นชุดข้อมูลที่มีขนาดเล็กลง แต่ยังคงมีขนาดใหญ่มาก ในกระบวนการนี้คุณต้องทำการปรับเปลี่ยนบางอย่างในระหว่างกระบวนการที่จะมีผลต่อผลลัพธ์ สมมติว่านี่เป็นตัวกรองสำหรับ (หรือต่อ) บันทึกบางประเภทตามสถานะของการคำนวณระดับกลางภายในการลดลง @EnumValueชนิดmyEnumTypeสามารถนำมาใช้ในการทดสอบสำหรับการนี้ SELECT ... FROM ... WHERE (@EnumValue & myEnumType.EnumValue1 = myEnumType.EnumValue1 AND ...) OR …

1
คอลัมน์ที่คำนวณอย่างต่อเนื่องทำให้เกิดการสแกน
การแปลงคอลัมน์ปกติเป็นคอลัมน์ที่คำนวณแล้วยังคงเป็นสาเหตุให้แบบสอบถามนี้ไม่สามารถค้นหาดัชนีได้ ทำไม? ทดสอบกับ SQL Server หลายเวอร์ชันรวมถึง 2016 SP1 CU1 Repros ด้วยคอลัมน์ที่คำนวณ ด้วยคอลัมน์ปกติ ปัญหาคือมี,table1col7 ตารางและแบบสอบถามเป็นต้นฉบับบางส่วน (และง่าย) ของต้นฉบับ ฉันทราบว่าคำถามอาจถูกเขียนใหม่แตกต่างกันและด้วยเหตุผลบางอย่างหลีกเลี่ยงปัญหา แต่เราจำเป็นต้องหลีกเลี่ยงการสัมผัสรหัสและคำถามที่ว่าทำไมtable1ไม่สามารถค้นหายังคงยืนอยู่ ดังที่ Paul White แสดงให้เห็น (ขอบคุณ!) การแสวงหานั้นจะเกิดขึ้นหากถูกบังคับดังนั้นคำถามคือ: ทำไมเครื่องมือเพิ่มประสิทธิภาพจึงไม่ได้ถูกเลือกโดยเครื่องมือเพิ่มประสิทธิภาพและไม่ว่าเราจะสามารถทำสิ่งที่แตกต่างออกไป รหัส? เพื่อชี้แจงส่วนที่มีปัญหานี่คือการสแกนที่เกี่ยวข้องในแผนการดำเนินการที่ไม่ดี:

1
COALESCE ไม่สามารถระบุได้ในตอนนี้
หนึ่งในนักพัฒนาของฉันกำลังโต้เถียงกันว่าCOALESCE(column, default value) = default valueตอนนี้ขายได้แล้ว นั่นถูกต้องใช่ไหม? ฉันรันการทดสอบต่อไปนี้แล้วและคิดว่าเป็นนัยที่COALESCEไม่สามารถโต้แย้งได้ USE tempdb; SELECT @@VERSION; -- Microsoft SQL Server 2016 (RTM-CU3-GDR) (KB3194717) - 13.0.2186.6 (X64) Oct 31 2016 18:27:32 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 14393: ) (Hypervisor) CREATE TABLE Test ( ID int primary …

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