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

SQL Server 2014 (รุ่นบิลด์หลัก 12.0.xxxx) โปรดติดแท็ก sql-server ด้วย

1
แผนแบบสอบถามเปลี่ยนประสิทธิภาพที่แย่ลงใน SQL Server 2014
เราเพิ่งอัพเกรดเซิร์ฟเวอร์ของเราจาก SQL Server 2008R2 เป็น SQL Server 2014 เรามีข้อความค้นหาที่ทำงานได้ดีในปี 2008R2 แต่ตอนนี้ในปี 2014 ทำงานช้าลงอย่างไม่น่าเชื่อมากและมีแผนปฏิบัติการที่ไม่ดี ฉันได้ทำการทดสอบหลายครั้ง ... สลับ 2014 DB กลับไปเป็นโหมดเข้ากันได้ 2008/2012 ทดสอบแบบสอบถามโดยใช้การแบ่งหน้า ทั้งสองอย่างนั้นส่งผลให้คิวรีทำงานเหมือนกันกับที่ทำและรวดเร็วเหมือน SQL Server 2008R2 เหตุใดแผนไม่ดีและแบบสอบถามทำงานนานใน SQL Server 2014 ภาพนี้แสดงข้อความค้นหา 2 คำโดยหนึ่งแถวใช้หมายเลขตามที่เรียกใช้ในปี 2008R2 จากนั้นรูปที่สองคือการแก้ไขด้วยการแบ่งหน้า ทั้งสองวิ่งในปี 2014 ทั้งสองแตกต่างกันมาก แต่ในปี 2008 เราเห็นประสิทธิภาพการทำงานเหมือนว่าเราใช้เลขหน้าในปี 2014

6
เซิร์ฟเวอร์ที่ลงทะเบียน SSMS พร้อมเจตนาการใช้งานแบบอ่านอย่างเดียว
เรากำลังดำเนินการทดสอบ SQL Server 2014 POC กับ AlwaysOn และหนึ่งในผู้ใช้ถามเกี่ยวกับการบันทึกการกำหนดค่าของ SSMS ด้วยเจตนาแบบอ่านอย่างเดียวโดยใช้เซิร์ฟเวอร์ที่ลงทะเบียนในกลุ่มเซิร์ฟเวอร์ท้องถิ่น วิธีนี้พวกเขาไม่จำเป็นต้องพิมพ์ชื่อนามแฝงทุกครั้งที่พวกเขาต้องการเข้าถึงReadOnly replica น่าเสียดายที่ไม่มีตัวเลือกภายในเซิร์ฟเวอร์ที่ลงทะเบียนเพื่อเพิ่มตัวเลือก ApplicationIntent ซึ่งแตกต่างจากนักสำรวจวัตถุปกติ ฉันเจอบทความนี้จาก Microsoft เกี่ยวกับการเปลี่ยนสตริงการเชื่อมต่อใน RegSrvr.xml https://connect.microsoft.com/SQLServer/feedback/details/786323/ssms-sql-server-management-studio-2012-missing-connection-properties-for-availability-groups ฉันลองใช้คำแนะนำของพวกเขาและมันไม่ได้เชื่อมต่อกับโหนดจำลองที่ถูกต้องเมื่อเชื่อมต่อผ่านเซิร์ฟเวอร์ท้องถิ่นในเซิร์ฟเวอร์ที่ลงทะเบียน อ่านได้อย่างเดียวตัวเลือกที่ทำงานได้ดีจากวัตถุสำรวจเมื่อใช้ตัวเลือกในหน้าต่างการเชื่อมต่อ> พารามิเตอร์การเชื่อมต่อเพิ่มเติม แต่จะไม่บันทึกการเปลี่ยนแปลงที่เกิดขึ้นกับการเชื่อมต่อ ไม่มีใครรู้วิธีแก้ปัญหาทางเลือกใด ๆ ในการบันทึกการกำหนดค่าด้วยคุณสมบัติการอ่านอย่างเดียวกับ SSMS ขอบคุณล่วงหน้าสำหรับความช่วยเหลือของ.

1
ความยาวสูงสุด 8000 อักขระสำหรับ OPENQUERY กับเซิร์ฟเวอร์ที่เชื่อมโยง
ฉันมีคำถามที่ฉันพยายามเรียกใช้OPENQUERYบน SSRS / SQL Server 2014 แต่ฉันได้รับข้อผิดพลาด: สตริงอักขระที่ขึ้นต้นด้วย [... ] ยาวเกินไป ความยาวสูงสุดคือ 8000 มีวิธีแก้ไขข้อ จำกัด นี้ไหม? สำหรับการอ้างอิงฉันพยายามเรียกใช้แบบสอบถามจาก SSRS ผ่านเซิร์ฟเวอร์ MySQL ที่เชื่อมโยง

1
การใช้เธรดของผู้ปฏิบัติงานระดับสูง HADR
เหตุใดจำนวนเธรดผู้ปฏิบัติงานของกลุ่มความพร้อมใช้งานในพูล HADR จะเพิ่มขึ้นมากกว่าการใช้งานขั้นต่ำของ " โดยทั่วไปแล้วจะมีเธรดที่ใช้ร่วมกัน 3-10 เธรด " ต่อแบบจำลอง ในกรณีหนึ่งเราได้สังเกตการใช้งาน 300+ เธรดที่มีกลุ่มความพร้อมใช้งาน 3 กลุ่มและรวม 10 ฐานข้อมูล SQL Server 2014 SP1 โอกาสในการขายของเราคือการสำรองข้อมูลในแบบจำลองสำรองกิจกรรมระดับสูงในแบบจำลองหลักรายงานเกี่ยวกับแบบจำลองรอง AG อยู่ในดาต้าเซ็นเตอร์บน VMware ทั้งหมด 16 schedulers รวมหัวข้อคนงานปกติอยู่ภายใต้ 200 ช่วง max_dopบนเซิร์ฟเวอร์คือ 2 3 AG, 10 DB, 4 replica แต่ละอัน - primary, 2 readonly, 1 ไม่สามารถอ่านได้ 1 ที่สองคือซิงค์ 2 async 16 …

2
เปลี่ยนดัชนีอ้างอิงสำหรับ Foreign Key
ฉันมีสิ่งนี้: CREATE TABLE T1 ( Id INT ... ,Constraint [PK_T1] PRIMARY KEY CLUSTERED [Id] ) CREATE TABLE T2 ( .... ,T1_Id INT NOT NULL ,CONSTRAINT [FK_T2_T1] FOREIGN KEY (T1_Id) REFERENCES T1(Id) ) เพื่อเหตุผลด้านประสิทธิภาพ (และการหยุดชะงัก) เหตุผลที่ฉันสร้างดัชนีใหม่บน T1 CREATE UNIQUE NONCLUSTERED INDEX IX_T1_Id ON T1 (Id) แต่ถ้าฉันตรวจสอบว่าดัชนีอ้างอิง FK ใดให้อ้างอิงไปยังดัชนีคลัสเตอร์ select ix.index_id, ix.name …

2
เป็นไปได้ที่จะ PIVOT ในคำสั่ง LIKE
เป็นไปได้ไหมที่จะจัดกลุ่มตามองค์ประกอบ (ดังในCOLUMN LIKE='Value%') ในPIVOTตาราง? ฉันมีตาราง [DBT] [สถานะ] ซึ่งมีสถานะต่าง ๆ (ของฐานข้อมูลอินสแตนซ์ ฯลฯ ) และไม่ต้องการหมุน / ค้นหาค่า PROD และการทดสอบทั้งหมดเป็นค่าเดียว เช่นแทนที่จะมีคอลัมน์สำหรับสถานะProd, Prod ACC, Prod APP.. ฯลฯ ฉันจะมีเพียงหนึ่งคอลัมน์ที่มีค่าสำหรับและName LIKE 'Prod%'Name LIKE 'Test%' สิ่งที่ฉันมี: นิยามของตาราง CREATE TABLE [DBT].[Status]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Status] PRIMARY KEY CLUSTERED ( [ID] ASC …

5
จับคู่ a] (ปิดวงเล็บเหลี่ยม) กับ PATINDEX โดยใช้สัญลักษณ์“ []”
ผมเขียนเอง JSON parser ใน T-SQL † สำหรับวัตถุประสงค์ในการแยกวิเคราะห์ฉันใช้PATINDEXฟังก์ชันที่คำนวณตำแหน่งของโทเค็นจากรายการโทเค็น โทเค็นในกรณีของฉันเป็นอักขระเดี่ยวทั้งหมดและรวมไว้ด้วย: {} []:, โดยปกติเมื่อฉันต้องการค้นหาตำแหน่ง (แรก) ของตัวละครที่กำหนดหลายตัวฉันจะใช้PATINDEXฟังก์ชั่นดังนี้: PATINDEX('%[abc]%', SourceString) ฟังก์ชั่นแล้วจะให้ฉันตำแหน่งแรกของaหรือbหรือc- SourceStringแล้วแต่จำนวนใดจะเกิดขึ้นจะพบแรก ตอนนี้ปัญหาในกรณีของฉันดูเหมือนจะเชื่อมต่อกับ]ตัวละคร ทันทีที่ฉันระบุไว้ในรายการตัวละครเช่นนี้ PATINDEX('%[[]{}:,]%', SourceString) ดูเหมือนว่ารูปแบบที่ฉันตั้งใจไว้จะพังเพราะฟังก์ชั่นไม่เคยพบคู่ที่ตรงกัน ดูเหมือนว่าฉันต้องการวิธีที่จะหลบหนีแรก]เพื่อให้PATINDEXถือว่าเป็นหนึ่งในตัวละครการค้นหามากกว่าสัญลักษณ์พิเศษ ฉันพบคำถามนี้ถามเกี่ยวกับปัญหาที่คล้ายกัน: ต้องการความช่วยเหลือกับตัวดำเนินการ LIKE และวงเล็บเหลี่ยม อย่างไรก็ตามในกรณีนั้น]ก็ไม่จำเป็นต้องระบุในวงเล็บเพราะมันเป็นเพียงหนึ่งตัวละครและมันสามารถระบุได้โดยไม่ต้องวงเล็บรอบพวกเขา โซลูชันทางเลือกซึ่งใช้การหลบหลีกใช้งานได้เฉพาะLIKEและไม่ได้ใช้PATINDEXเพราะใช้การย่อยESCAPEด้วยการสนับสนุนจากอดีตและไม่ใช่อย่างหลัง ดังนั้นคำถามของฉันคือมีวิธีการค้นหา]ด้วยการPATINDEXใช้[ ]สัญลักษณ์แทนหรือไม่ หรือมีวิธีจำลองการทำงานโดยใช้เครื่องมือ Transact-SQL อื่น ๆ หรือไม่? ข้อมูลเพิ่มเติม นี่คือตัวอย่างของแบบสอบถามที่ฉันต้องการใช้PATINDEXกับ[…]รูปแบบดังกล่าวข้างต้น รูปแบบที่นี่ใช้งานได้ (แม้ว่าจะค่อนข้าง ) เพราะมันไม่ได้รวม]ตัวละคร ฉันต้องการที่จะทำงานด้วย]เช่นกัน: WITH data AS (SELECT CAST('{"f1":["v1","v2"],"f2":"v3"}' AS varchar(max)) …

1
การเข้าร่วมแฮชระหว่างตารางต้นแบบ / ตารางรายละเอียดจะสร้างการประมาณค่าเชิงหัวใจต่ำเกินไป
เมื่อเข้าร่วมตารางต้นแบบเข้ากับตารางรายละเอียดฉันจะสนับสนุน SQL Server 2014 ให้ใช้การประมาณค่าเชิงการนับของตารางขนาดใหญ่ (รายละเอียด) เป็นการประมาณค่าความสำคัญของการรวมเอาต์พุตได้อย่างไร ตัวอย่างเช่นเมื่อเข้าร่วมแถวหลัก 10K ถึงแถวรายละเอียด 100K ฉันต้องการให้ SQL Server ประมาณค่าการเข้าร่วมที่แถว 100K - เหมือนกับจำนวนแถวรายละเอียดโดยประมาณ ฉันควรจัดโครงสร้างคิวรีและ / หรือตารางและ / หรือดัชนีของฉันอย่างไรเพื่อช่วยให้ตัวประมาณของ SQL Server ใช้ประโยชน์จากข้อเท็จจริงที่ว่าทุกแถวรายละเอียดมีแถวหลักที่สอดคล้องกันเสมอ (หมายความว่าการเข้าร่วมระหว่างพวกเขาไม่ควรลดค่าประมาณของ cardinality) นี่คือรายละเอียดเพิ่มเติม ฐานข้อมูลของเรามีคู่ของตารางต้นแบบ / รายละเอียด: VisitTargetมีหนึ่งแถวสำหรับแต่ละธุรกรรมการขายและVisitSaleมีหนึ่งแถวสำหรับแต่ละผลิตภัณฑ์ในแต่ละธุรกรรม มันเป็นความสัมพันธ์แบบหนึ่งต่อหลายคน: หนึ่งแถว VisitTarget สำหรับแถว VisitSale เฉลี่ย 10 แถว ตารางมีลักษณะดังนี้: (ฉันลดความซับซ้อนของคอลัมน์ที่เกี่ยวข้องสำหรับคำถามนี้เท่านั้น) -- "master" table CREATE TABLE VisitTarget ( …

1
จะถอนการติดตั้ง SQL Server 2014 Standard Edition โดยไม่ต้องติดตั้งสื่อได้อย่างไร
ฉันมีสำเนาของ SQL Server 2014 Standard ติดตั้งอยู่ในกล่อง dev ของฉันเป็นอินสแตนซ์เริ่มต้นสำหรับสองสามปี ฉันติดตั้งมาตรฐานบนเครื่องของฉันเพราะฉันมีใบอนุญาตฟรีที่ฉันสามารถใช้ผ่านการสมัคร MSDN ของฉัน ตอนนี้ฉันต้องการถอนการติดตั้ง SQL Server 2014 และทำให้ SQL Server 2017 Developer Edition เป็นอินสแตนซ์เริ่มต้นของฉัน ฉันพยายามถอนการติดตั้ง SQL Server 2014 ผ่านทางเวิร์กโฟลว์ Add / Remove Programs มาตรฐาน แต่หลังจากถามฉันว่าคุณสมบัติใดที่ฉันต้องการถอนการติดตั้งจะแจ้งให้ฉันสำหรับไดเรกทอรีที่มีสื่อถอนการติดตั้ง น่าเสียดายที่ฉันไม่ได้บันทึกแพ็คเกจดาวน์โหลด SQL Server 2014 ที่ฉันได้รับจาก MSDN และฉันไม่สามารถเข้าถึง MSDN ได้อีกต่อไป ฉันตรวจสอบ My Visual Studio แล้ว แต่กลับไปที่ SQL Server …

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, หนึ่งแค็ตตาล็อกต่อสคีมา, หนึ่งแคตตาล็อกต่อดัชนี อย่างไรก็ตามเซิร์ฟเวอร์หยุดทำงานกับงานที่ถูกระงับเหล่านี้ทั้งหมด อะไรคือสาเหตุของการรอคอยสิ่งนี้สามารถแก้ไข / บรรเทาได้อย่างไร และอะไรคือวิธีที่แนะนำในการเปิดใช้งานข้อความแบบเต็มบนตารางจำนวนมากเช่นนี้

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 และไม่สามารถล้างบันทึกได้ มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น?

2
การค้นหาไม่ตอบสนองเมื่อเพิ่มสองคอลัมน์
เมื่อฉันเพิ่มสองคอลัมน์ลงในแบบสอบถามที่ฉันเลือกไม่ตอบสนอง nvarchar(2000)ประเภทของคอลัมน์ มันผิดปกติเล็กน้อย เวอร์ชันเซิร์ฟเวอร์ SQL คือ 2014 มีดัชนีหลักเพียงหนึ่งดัชนีเท่านั้น ระเบียนทั้งหมดมีเพียง 1,000 แถว นี่คือแผนการดำเนินการก่อนหน้า ( XML showplan ): แผนการดำเนินการหลังจาก ( XML showplan ): นี่คือแบบสอบถาม: select top(100) Batch_Tasks_Queue.id, btq.id, Batch_Tasks_Queue.[Parameters], -- this field btq.[Parameters] -- and this field from Batch_Tasks_Queue with(nolock) inner join Batch_Tasks_Queue btq with(nolock) on Batch_Tasks_Queue.Start_Time < btq.Start_Time and btq.Start_Time < …

2
Cardinality Estimation สำหรับ> = และ> สำหรับค่าสถิติขั้นตอนภายใน
ฉันพยายามที่จะเข้าใจว่า SQL Server พยายามประเมิน 'มากกว่า' และ 'มากกว่าเท่ากับ' โดยที่ clauses ใน SQL Server 2014 ฉันคิดว่าฉันเข้าใจการประเมินความสำคัญเชิงหัวใจเมื่อมันกระทบกับขั้นตอนเช่นถ้าฉันทำ select * from charge where charge_dt >= '1999-10-13 10:47:38.550' การประเมินความสำคัญเชิงหัวใจคือ 6672 ซึ่งสามารถคำนวณได้ง่ายเป็น 32 (EQ_ROWS) + 6624 (RANGE_ROWS) + 16 (EQ_ROWS) = 6672 (ฮิสโตแกรมในภาพด้านล่าง) แต่เมื่อฉันทำ select * from charge where charge_dt >= '1999-10-13 10:48:38.550' (เพิ่มเวลาเป็น 10:48 ดังนั้นจึงไม่ใช่ขั้นตอน) …

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