คำถามติดแท็ก execution-plan

กลยุทธ์ที่เลือกโดยเครื่องมือเพิ่มประสิทธิภาพคิวรีเพื่อประมวลผลแบบสอบถาม

1
ผู้ประกอบการใช้ tempdb ในการรั่วไหลของข้อมูลระหว่างการดำเนินการกับระดับที่หก
ฉันกำลังดิ้นรนเพื่อลดต้นทุนของการดำเนินการเรียงลำดับในแผนแบบสอบถามด้วยOperator usedtempdb คำเตือนto spill data during execution with spill level 2 ฉันพบโพสต์หลายรายการที่เกี่ยวข้องกับข้อมูลการรั่วไหลในระหว่างการดำเนินการกับการรั่วไหลระดับ 1แต่ไม่ใช่ระดับ 2 ดูเหมือนว่าระดับ 1 จะทำให้สถิติล้าสมัยแล้วระดับ 2 เป็นอย่างไร level 2ฉันไม่สามารถหาอะไรที่เกี่ยวข้องกับ ฉันพบบทความนี้น่าสนใจมากที่เกี่ยวข้องกับคำเตือนการเรียง: อย่าเพิกเฉยต่อคำเตือนการเรียงลำดับใน SQL Server เซิร์ฟเวอร์ SQL ของฉัน Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) 17 มิถุนายน 2016 19:14:09 ลิขสิทธิ์ (c) Microsoft Corporation รุ่นองค์กรองค์กร (64 บิต) บน Windows …

1
SQL Server 2016 Bad Query Plan ล็อคฐานข้อมูลสัปดาห์ละครั้ง
สัปดาห์ละครั้งในช่วง 5 สัปดาห์ที่ผ่านมาในช่วงเวลาเดียวกันของวัน (เช้าตรู่อาจขึ้นอยู่กับกิจกรรมของผู้ใช้เมื่อผู้คนเริ่มใช้งาน), SQL Server 2016 (AWS RDS, มิร์เรอร์) เริ่มจับเวลาจำนวนมาก คำสั่ง ปรับปรุงสถิติในตารางทั้งหมดแก้ไขได้ทันที หลังจากครั้งแรกฉันทำให้มันอัปเดตสถิติทั้งหมดในทุกตารางทุกคืน (แทนที่จะเป็นรายสัปดาห์) แต่มันยังคงเกิดขึ้น (ประมาณ 8 ชั่วโมงหลังจากสถิติการอัปเดตทำงาน แต่ไม่ใช่ทุกวันที่มันทำงาน) ครั้งล่าสุดที่ฉันเปิดใช้งาน Query Store เพื่อดูว่าฉันสามารถค้นหาแผนแบบสอบถาม / แบบสอบถามที่เฉพาะเจาะจงได้หรือไม่ ฉันคิดว่าฉันสามารถ จำกัด ให้แคบลงหนึ่ง: หลังจากค้นหาข้อความค้นหานั้นฉันได้เพิ่มดัชนีที่แนะนำซึ่งขาดหายไปจากแบบสอบถามที่ไม่ได้ใช้บ่อยครั้งนี้ แผนแบบสอบถามที่ไม่ถูกต้องกำลังทำการสแกนดัชนี (บนตารางที่มีแถว 10k เท่านั้น) แผนคิวรีอื่น ๆ ที่ส่งคืนหน่วยเป็นมิลลิวินาทีใช้ในการสแกนแบบเดียวกัน แผนแบบสอบถามใหม่ล่าสุดหลังจากสร้างดัชนีใหม่จะค้นหาเท่านั้น แต่ถึงแม้จะไม่มีดัชนีนั้นก็ 99% ของเวลา แต่มันกลับมาภายในเวลาไม่กี่มิลลิวินาที แต่จากนั้นทุกสัปดาห์จะใช้เวลา> 40 วินาที แย่มากที่หมดเวลา: http://brentozar.com/pastetheplan/?id=rymaWt56e แผนก่อนหน้าซึ่งไม่หมดเวลา: http://brentozar.com/pastetheplan/?id=HyN7ftcpe แผนใหม่ล่าสุดพร้อมดัชนีใหม่: …

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, …

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

1
แผนการดำเนินการที่มีดัชนีหายไปหลายรายการ
หากคุณเรียกใช้แบบสอบถามด้วย 'รวมแผนการดำเนินการตามจริง' แผนจะแนะนำดัชนีที่ขาดหายไปด้วย รายละเอียดดัชนีอยู่ภายในMissingIndexesแท็กใน XML มีสถานการณ์หรือไม่เมื่อแผนมีข้อเสนอแนะหลายดัชนี? ฉันลองใช้คำสั่ง sql ที่แตกต่างกัน แต่ไม่สามารถหาข้อสงสัยใด ๆ ที่สร้างดัชนีที่ขาดหายไปสองรายการขึ้นไป

2
วิธีเพิ่มประสิทธิภาพการสืบค้น T-SQL โดยใช้ Execution Plan
ฉันมีแบบสอบถาม SQL ที่ฉันใช้เวลาสองวันที่ผ่านมาพยายามเพิ่มประสิทธิภาพโดยใช้การทดลองและข้อผิดพลาดและแผนการดำเนินการ แต่ไม่มีประโยชน์ โปรดยกโทษให้ฉันที่ทำเช่นนี้ แต่ฉันจะโพสต์แผนการดำเนินการทั้งหมดที่นี่ ฉันได้ใช้ความพยายามในการสร้างชื่อตารางและคอลัมน์ในแบบสอบถามและแผนปฏิบัติการทั่วไปทั้งเพื่อความกระชับและเพื่อปกป้อง IP ของ บริษัท ของฉัน แผนปฏิบัติการสามารถเปิดได้กับSQL ยามแผน Explorer ที่ ฉันทำ T-SQL ในปริมาณที่พอใช้ แต่การใช้แผนการดำเนินการเพื่อเพิ่มประสิทธิภาพการสืบค้นของฉันเป็นพื้นที่ใหม่สำหรับฉันและฉันได้พยายามเข้าใจวิธีการทำ ดังนั้นหากใครสามารถช่วยฉันด้วยและอธิบายว่าแผนปฏิบัติการนี้สามารถถอดรหัสเพื่อค้นหาวิธีในการค้นหาเพื่อเพิ่มประสิทธิภาพได้ฉันจะขอบคุณตลอดไป ฉันมีคำถามเพิ่มเติมเพื่อเพิ่มประสิทธิภาพ - ฉันต้องการกระดานกระโดดน้ำเพื่อช่วยฉันในเรื่องนี้เป็นครั้งแรก นี่คือแบบสอบถาม: DECLARE @Param0 DATETIME = '2013-07-29'; DECLARE @Param1 INT = CONVERT(INT, CONVERT(VARCHAR, @Param0, 112)) DECLARE @Param2 VARCHAR(50) = 'ABC'; DECLARE @Param3 VARCHAR(100) = 'DEF'; DECLARE @Param4 VARCHAR(50) …

3
เหตุใดจึงมีแผนปฏิบัติการแตกต่างกันระหว่าง OFFSET … FETCH และแบบ ROW_NUMBER แบบเก่า
OFFSET ... FETCHรุ่นใหม่แนะนำด้วย SQL Server 2012 เสนอการเพจที่ง่ายและเร็วขึ้น ทำไมจึงมีความแตกต่างใด ๆ เมื่อพิจารณาว่าทั้งสองรูปแบบมีความหมายเหมือนกันและเป็นเรื่องธรรมดามาก? ใครจะสันนิษฐานว่าเครื่องมือเพิ่มประสิทธิภาพรับรู้ทั้งสองและเพิ่มประสิทธิภาพพวกเขา (เล็กน้อย) อย่างเต็มที่ นี่เป็นกรณีที่ง่ายมากซึ่งOFFSET ... FETCHเร็วกว่าประมาณ 2 เท่าตามประมาณการต้นทุน SELECT * INTO #objects FROM sys.objects SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY object_id) r FROM #objects ) x WHERE r >= 30 AND r < (30 + 10) …

1
ดัชนีไม่ได้ใช้กับ `= any () 'แต่ใช้กับ` in'
ตารางtมีสองดัชนี: create table t (a int, b int); create type int_pair as (a int, b int); create index t_row_idx on t (((a,b)::int_pair)); create index t_a_b_idx on t (a,b); insert into t (a,b) select i, i from generate_series(1, 100000) g(i) ; ไม่มีการใช้ดัชนีกับanyผู้ประกอบการ: explain analyze select * from t where (a,b) = …

1
การตีความ Showplan XML ของ SQL Server
ฉันเพิ่งเปิดตัวฟีเจอร์บนเว็บไซต์ของฉันที่http://sqlfiddle.comซึ่งอนุญาตให้ผู้ใช้ดูแผนปฏิบัติการแบบดิบสำหรับการสืบค้น ในกรณีของ PostgreSQL, MySQL และ (ในระดับหนึ่ง) Oracle การดูผลลัพธ์ของแผนการดำเนินการดิบนั้นสามารถเข้าใจได้ อย่างไรก็ตามหากคุณดูผลลัพธ์ของแผนการดำเนินการสำหรับ SQL Server (สร้างด้วยSET SHOWPLAN_XML ON) จะมี XML จำนวนมหาศาลที่สามารถลุยได้แม้จะเป็นการสืบค้นที่ค่อนข้างง่าย นี่คือตัวอย่าง (นำมาจากแผนการดำเนินการของแบบสอบถามล่าสุดสำหรับ 'ซอ': http://sqlfiddle.com/#!3/1fa93/1 ): <ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.1" Build="10.50.2500.0"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementText="
select * from supportContacts" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032853" StatementEstRows="3" StatementOptmLevel="TRIVIAL" QueryHash="0x498D13A3874D9B6E" QueryPlanHash="0xD5DDBD3C2D195E96"> <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false"/> …

2
สแกนแกนอย่างต่อเนื่อง
ฉันมีตารางที่มีแถวไม่กี่สิบแถว การตั้งค่าแบบง่ายกำลังติดตาม CREATE TABLE #data ([Id] int, [Status] int); INSERT INTO #data VALUES (100, 1), (101, 2), (102, 3), (103, 2); และฉันมีแบบสอบถามที่รวมตารางนี้เข้ากับชุดของค่าตารางที่สร้างแถว (ทำจากตัวแปรและค่าคงที่) เช่น DECLARE @id1 int = 101, @id2 int = 105; SELECT COALESCE(p.[Code], 'X') AS [Code], COALESCE(d.[Status], 0) AS [Status] FROM (VALUES (@id1, 'A'), (@id2, 'B') ) p([Id], …

1
การปรับปรุงดัชนีที่ไม่ซ้ำกันและเคาน์เตอร์แก้ไขแถวสถิติ
รับตารางต่อไปนี้ดัชนีคลัสเตอร์ที่ไม่ซ้ำกันและสถิติ: CREATE TABLE dbo.Banana ( pk integer NOT NULL, c1 char(1) NOT NULL, c2 char(1) NOT NULL ); CREATE UNIQUE CLUSTERED INDEX pk ON dbo.Banana (pk); CREATE STATISTICS c1 ON dbo.Banana (c1); CREATE STATISTICS c2 ON dbo.Banana (c2); INSERT dbo.Banana (pk, c1, c2) VALUES (1, 'A', 'W'), (2, 'B', 'X'), …

2
ความรู้สึกและประโยชน์ของการใช้ SqlCommand.Prepare () คืออะไร?
ฉันเจอรหัสนักพัฒนาซอฟต์แวร์ที่ SqlCommand.Prepare () (ดู MSDN)วิธีการใช้อย่างกว้างขวางล่วงหน้าก่อนการดำเนินการของแบบสอบถาม SQL และฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร? ตัวอย่าง: command.Prepare(); command.ExecuteNonQuery(); //... command.Parameters[0].Value = 20; command.ExecuteNonQuery(); ฉันได้เล่นไปรอบ ๆ เล็กน้อยและติดตาม การดำเนินการของคำสั่งหลังจากเรียกPrepare()วิธีทำให้ SQL Server ดำเนินการคำสั่งต่อไปนี้: declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@id int,@desc text',N'INSERT INTO dbo.testtable (id) VALUES (@id)',@id=20' select @p1 หลังจากนั้นเมื่อพารามิเตอร์ได้รับมันเป็นค่าและSqlCommand.ExecuteNonQuery()ถูกเรียกต่อไปนี้ได้รับการดำเนินการใน Sql-Server: exec sp_execute 1,@id=20 สำหรับฉันแล้วดูเหมือนว่าคำสั่งจะได้รับการรวบรวมเมื่อPrepare()มีการดำเนินการในไม่ช้า ฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร นี่หมายความว่าใส่ลงในแคชแผนและสามารถนำกลับมาใช้ใหม่ได้ทันทีที่มีการดำเนินการคิวรีสุดท้ายด้วยค่าพารามิเตอร์ที่ต้องการ? ฉันคิดออก (และบันทึกไว้ในคำถามอื่น …

1
SQL Server สร้างแผนใหม่ในแต่ละวัน
เรามีปัญหานี้ในสภาพแวดล้อมการผลิตของเรา Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) - รุ่นองค์กร (64 บิต) บน Windows NT 6.1 (รุ่น 7601: Service Pack 1) SQL Server กำลังวางแผนปฏิบัติการเกือบทั้งหมด (เกือบ 100%) และสร้างใหม่ทุกวันข้ามคืน (จาก 11:00 PM ถึง 8:00 AM) สิ่งนี้เกิดขึ้นเมื่อ 'สถิติการอัปเดตอัตโนมัติ' อยู่ในสถานะปิดใช้งาน เราได้เปิด 'สถิติการอัปเดตอัตโนมัติ' ในช่วง 2-3 สัปดาห์ที่ผ่านมา แต่มันก็ยังคงเกิดขึ้น เราไม่รู้จริง ๆ ว่าอะไรเป็นต้นเหตุของแผนยุคใหม่นี้ แต่เรามั่นใจว่าเราจะไม่ทำด้วยตนเอง สิ่งเดียวที่เกิดขึ้นจริงกับช่วงเวลาของแผนที่ถูกสร้างใหม่คืองานบำรุงรักษาฐานข้อมูลที่เรามี: ดัชนีรายวันปรับโครงสร้างองค์กรใหม่ …

1
บังคับให้สปูลดัชนี
ฉันรู้ว่าบางสิ่งบางอย่างที่ควรหลีกเลี่ยงด้วยเหตุผลด้านประสิทธิภาพ แต่ฉันกำลังพยายามแสดงสภาพที่มันปรากฏเป็นตัวอย่างในการทำให้แน่ใจว่ามันจะไม่ปรากฏขึ้น อย่างไรก็ตามฉันท้ายด้วยคำเตือนดัชนีที่ขาดหายไป แต่เครื่องมือเพิ่มประสิทธิภาพเลือกที่จะไม่สร้างดัชนีชั่วคราว แบบสอบถามที่ฉันใช้คือ SELECT z.a FROM dbo.t5 AS z WITH(INDEX(0)) WHERE EXISTS ( SELECT y.a FROM dbo.t4 AS y WHERE y.a = z.a ) OPTION (MAXDOP 1); แผนผังตารางคือ: CREATE TABLE dbo.t4 ( a integer NULL, b varchar(1000) NULL, p varchar(100) NULL ); CREATE TABLE dbo.t5 ( a integer …

1
บังคับให้ใช้แผนที่สำหรับบุคคลที่สองที่อ่านได้
หากมีการบังคับใช้แผนหลักในกลุ่มความพร้อมใช้งานจะมีการนำไปใช้กับคิวรีที่เรียกใช้บนรองหรือไม่? ฉันกำลังมองหาคำตอบที่ครอบคลุมความเป็นไปได้ทั้งในการวางแผนบังคับ: แนวทางการวางแผน แผนบังคับใช้ Query Store ฉันได้อ่านสิ่งต่อไปนี้ที่แนะนำแผนการบังคับใช้ QS ไม่ได้ดำเนินการ แต่ไม่พบสิ่งใดที่เชื่อถือได้ในเอกสารประกอบ Query Store และกลุ่มความพร้อมใช้งานโดย Erin Stellato แบบสอบถามข้อมูลที่เก็บบังคับพฤติกรรมแผนบนรอง AlwaysOn สามารถอ่านได้โดย Vikas Rana หลักฐานการบังคับจะมีการปรากฏตัวของUse PlanหรือPlanGuideNameและPlanGuideDBคุณสมบัติในการวางแผนการดำเนินการรอง

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