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

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

1
ชุดข้อมูลสถิติ IO- โต๊ะทำงาน / ไฟล์งาน
ฉันกำลังดำเนินการแบบสอบถามที่สร้างแผน: สถิติ IO: Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads …

1
โพรบแฮชคีย์และส่วนที่เหลือ
สมมติว่าเรามีคำถามเช่นนี้: select a.*,b.* from a join b on a.col1=b.col1 and len(a.col1)=10 สมมติว่าแบบสอบถามดังกล่าวจะใช้แฮร่วมและมีส่วนที่เหลือที่สำคัญการสอบสวนจะเป็นและที่เหลือจะเป็นcol1len(a.col1)=10 แต่ในขณะที่ดูตัวอย่างอื่นฉันสามารถเห็นทั้งโพรบและส่วนที่เหลือเป็นคอลัมน์เดียวกัน ด้านล่างนี้เป็นรายละเอียดเกี่ยวกับสิ่งที่ฉันพยายามจะพูด: ค้นหา: select * from T1 join T2 on T1.a = T2.a แผนการดำเนินการพร้อมโพรบและไฮไลต์ที่เหลือ: ข้อมูลการทดสอบ: create table T1 (a int, b int, x char(200)) create table T2 (a int, b int, x char(200)) set nocount on declare @i …

1
เหตุใด SQL Server“ Compute Scalar” เมื่อฉันเลือกคอลัมน์ที่คำนวณยังคงอยู่
สามSELECTคำสั่งในรหัสนี้ USE [tempdb]; GO SET NOCOUNT ON; CREATE TABLE dbo.persist_test ( id INT NOT NULL , id5 AS (id * 5) , id5p AS (id * 5) PERSISTED ); INSERT INTO dbo.persist_test (id) VALUES (1), (2), (3); SELECT id FROM dbo.persist_test; SELECT id5 FROM dbo.persist_test; SELECT id5p FROM dbo.persist_test; DROP …

2
“ Recheck Cond:” บรรทัดในแผนคิวรีพร้อมการสแกนดัชนีบิตแมป
นี่คือการแยกความคิดเห็นจากคำถามก่อนหน้า: Postgres 9.4.4 แบบสอบถามใช้เวลาตลอดไป ใช้ PostgreSQL 9.4 มีเสมอดูเหมือนว่าจะเป็นสายหลังจากสแกนดัชนีบิตแมปในการส่งออกแผนแบบสอบถามโดยRecheck Cond:EXPLAIN กดไลค์ในEXPLAINผลลัพธ์ของคำถามอ้างอิง: -> Bitmap Heap Scan on table_three (cost=2446.92..19686.74 rows=8159 width=7) Recheck Cond: (("timestamp" > (now() - '30 days'::interval)) AND (client_id > 0)) -> BitmapAnd (cost=2446.92..2446.92 rows=8159 width=0) -> Bitmap Index Scan on table_one_timestamp_idx (cost=0.00..1040.00 rows=79941 width=0) Index Cond: ("timestamp" > (now() …

2
คำค้นหาที่ไม่มีแผนเพียงพอที่ดี
ฉันมีฐานข้อมูล SQL Server 2012 ผมสังเกตเห็นค่าของสำหรับการค้นหาบางอย่างและทั้งหมดให้Reason for early termination of statement optimization Good Enough Plan Foundตอนนี้คำถามของฉันคือ: ประเภทใดบ้างที่เป็นไปได้ของ“ เหตุผลในการยกเลิกการปรับให้เหมาะสมที่สุดในช่วงต้น” ฉันค้นหาสิ่งนี้เป็น msdn แต่ไม่ได้รับรายการค่าทั้งหมด มี DMV หรือเหตุการณ์เพิ่มเติมเพื่อแสดงรายการคำค้นหาทั้งหมดที่การเพิ่มประสิทธิภาพถูกยกเลิกเนื่องจากเหตุผลอื่นนอกเหนือจาก Good Enough Plan Found หรือไม่ ฉันอ้างอิงบทความสองบทความต่อไปนี้ซึ่งไม่ได้แสดงรายการความเป็นไปได้ทั้งหมด [พวกเขายังให้ผลลัพธ์ที่แตกต่างในฐานข้อมูลของฉันด้วย] การค้นหา: หมดเวลาการรวบรวมข้อความค้นหา การระบุแผนการสืบค้นที่ไม่ดีพอ

4
แผนการดำเนินการ vs ข้อมูลสถิติ IO
แผนการดำเนินการกราฟิก SQL Server อ่านจากขวาไปซ้ายและบนลงล่าง มีคำสั่งที่มีความหมายต่อเอาต์พุตที่สร้างขึ้นโดยSET STATISTICS IO ON? แบบสอบถามต่อไปนี้: SET STATISTICS IO ON; SELECT * FROM Sales.SalesOrderHeader AS soh JOIN Sales.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID JOIN Production.Product AS p ON sod.ProductID = p.ProductID; สร้างแผนนี้: และSTATISTICS IOผลลัพธ์นี้: Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead …

2
แบบสอบถาม T-SQL โดยใช้แผนแตกต่างกันอย่างสมบูรณ์ขึ้นอยู่กับจำนวนแถวที่ฉันกำลังอัปเดต
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ฉันมีคำสั่ง SQL UPDATE พร้อมประโยค "TOP (X)" และแถวที่ฉันอัปเดตค่ามีประมาณ 4 พันล้านแถว เมื่อฉันใช้ "TOP (10)" ฉันจะได้รับแผนการดำเนินการหนึ่งแผนซึ่งจะดำเนินการเกือบจะทันที แต่เมื่อฉันใช้ "TOP (50)" หรือใหญ่กว่าแบบสอบถามจะไม่เสร็จสิ้น (อย่างน้อยไม่ใช่ในขณะที่ฉันรอ) มันใช้แผนการดำเนินการที่แตกต่างอย่างสิ้นเชิง เคียวรีขนาดเล็กใช้แผนอย่างง่ายมากที่มีคู่ของการค้นหาดัชนีและการเข้าร่วมลูปที่ซ้อนกันซึ่งแบบสอบถามเดียวกันที่แน่นอน (มีจำนวนแถวที่แตกต่างกันในส่วนคำสั่งย่อยด้านบนของคำสั่ง UPDATE) ใช้แผนที่เกี่ยวข้องกับการค้นหาดัชนีสองรายการ สปูลของตารางการขนานและความซับซ้อนอื่น ๆ ฉันใช้ "OPTION (ใช้แผน ... )" เพื่อบังคับให้ใช้แผนการดำเนินการที่สร้างโดยเคียวรีขนาดเล็ก - เมื่อฉันทำสิ่งนี้ฉันสามารถอัปเดตได้มากถึง 100,000 แถวในไม่กี่วินาที ฉันรู้ว่าแผนการสืบค้นเป็นสิ่งที่ดี แต่ SQL Server …

1
ฉันควรตื่นตระหนกโดยคำเตือน NO NO JOIN PREDICATE หรือไม่?
ฉันกำลังแก้ไขปัญหาบิตและชิ้นส่วนของกระบวนงานที่เก็บไว้ที่มีประสิทธิภาพต่ำ ส่วนนี้ของขั้นตอนการส่งคำเตือน NO JOIN PREDICATE select method = case methoddescription when 'blah' then 'Ethylene Oxide' when NULL then 'N/A' else methoddescription end, testmethod = case methoddescription when 'blah' then 'Biological Indicators' when NULL then 'N/A' else 'Dosimeter Reports' end, result = case when l.res is null or l.res <> 1 …

2
คุณสามารถอธิบายแผนการดำเนินการนี้ได้หรือไม่
ฉันกำลังค้นคว้าอย่างอื่นเมื่อฉันเจอสิ่งนี้ ฉันกำลังสร้างตารางทดสอบที่มีข้อมูลอยู่ในนั้นและเรียกใช้คิวรีที่แตกต่างกันเพื่อค้นหาว่าวิธีการเขียนคิวรีต่างกันมีผลต่อแผนการดำเนินการอย่างไร นี่คือสคริปต์ที่ฉันใช้ในการสร้างข้อมูลทดสอบแบบสุ่ม: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('t') AND type in (N'U')) DROP TABLE t GO CREATE TABLE t ( c1 int IDENTITY(1,1) NOT NULL ,c2 int NULL ) GO insert into t select top 1000000 a from (select t1.number*2048 + t2.number a, newid() b …

3
ติดตามสถานะ 4199 - เปิดใช้งานทั่วโลกหรือไม่
สิ่งนี้อาจอยู่ภายใต้หมวดหมู่ของความเห็น แต่ฉันอยากรู้ว่าผู้คนกำลังใช้การตั้งค่าสถานะการสืบค้นกลับ 4199เป็นพารามิเตอร์เริ่มต้นสำหรับ SQL Server สำหรับผู้ที่เคยใช้มาแล้วคุณพบกับการถดถอยของแบบสอบถามภายใต้สถานการณ์ใดบ้าง ดูเหมือนว่ามันจะเป็นประโยชน์ต่อการปฏิบัติงานทั่วทั้งกระดานฉันกำลังพิจารณาที่จะเปิดใช้งานทั่วโลกในสภาพแวดล้อมที่ไม่ใช่การผลิตของเราและปล่อยให้มันนั่งสองสามเดือนเพื่อแก้ไขปัญหา การแก้ไขใน 4199 มีการสะสมในเครื่องมือเพิ่มประสิทธิภาพโดยปริยายในปี 2014 (หรือ 2016) หรือไม่? แม้ว่าฉันจะเข้าใจกรณีที่ไม่แนะนำการเปลี่ยนแปลงแผนโดยไม่คาดคิด แต่ก็แปลกที่จะซ่อนการแก้ไขทั้งหมดนี้ไว้ระหว่างรุ่น เรากำลังใช้ 2008, 2008R2 และส่วนใหญ่ 2012

1
SQL Server จะเตือนเกี่ยวกับการให้สิทธิ์หน่วยความจำมากเกินไปเมื่อใด
เงื่อนไขใดบ้างที่ทำให้เกิดคำเตือนแผนการดำเนินการ"ให้เงินทุนมากเกินไป" ? หน่วยความจำแบบสอบถามให้ตรวจพบ "ExcessiveGrant" ซึ่งอาจส่งผลกระทบต่อความน่าเชื่อถือ ขนาดการให้สิทธิ์: เริ่มต้น 5128 KB, สุดท้าย 5128 KB, ใช้แล้ว 16 KB SSMS แผนสำรวจ Showplan xml <Warnings> <MemoryGrantWarning GrantWarningKind="Excessive Grant" RequestedMemory="5128" GrantedMemory="5128" MaxUsedMemory="16" /> </Warnings>

1
INSERT แบบแถวเดียว…เลือกช้ากว่าการเลือกแบบแยก
รับตารางฮีปต่อไปนี้ด้วย 400 แถวหมายเลขตั้งแต่ 1 ถึง 400: DROP TABLE IF EXISTS dbo.N; GO SELECT SV.number INTO dbo.N FROM master.dbo.spt_values AS SV WHERE SV.[type] = N'P' AND SV.number BETWEEN 1 AND 400; และการตั้งค่าต่อไปนี้: SET NOCOUNT ON; SET STATISTICS IO, TIME OFF; SET STATISTICS XML OFF; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; ต่อไปนี้SELECTเสร็จสมบูรณ์คำสั่งในรอบ6 …

2
วิธีวัดหรือค้นหาค่าใช้จ่ายในการสร้างแผนแบบสอบถาม
ฉันมีกรณีทั่วไปที่การดมพารามิเตอร์ทำให้แผนการดำเนินการ "ไม่ดี" ลงจอดในแคชแผนทำให้การดำเนินการที่ตามมาของโพรซีเดอร์ที่เก็บไว้ของฉันช้ามาก ฉันสามารถ "แก้" ปัญหานี้กับตัวแปรท้องถิ่นและOPTIMIZE FOR ... UNKNOWN OPTION(RECOMPILE)อย่างไรก็ตามฉันสามารถดำน้ำในแบบสอบถามและพยายามปรับให้เหมาะสม ฉันพยายามที่จะตรวจสอบว่าฉันควร : กำหนดเวลาที่ จำกัด ในการแก้ไขปัญหาที่ฉันต้องการทราบค่าใช้จ่ายของการไม่ทำมัน ตามที่เห็นถ้าฉันเพิ่งติดกับOPTION(RECOMPILE)ผลกระทบสุทธิคือแผนแบบสอบถามจะถูกสร้างขึ้นใหม่ทุกครั้งที่มีการเรียกใช้แบบสอบถาม ดังนั้นฉันคิดว่าฉันต้องรู้: จะทราบได้อย่างไรว่าต้นทุนการสร้างแผนแบบสอบถามเป็นอย่างไร เพื่อตอบคำถามของฉันฉันได้ Googled (เช่นกับการค้นหานี้ ) และฉันได้อ่านเอกสารของคอลัมน์สำหรับ dm_exec_query_statsDMVแล้ว ฉันได้ตรวจสอบหน้าต่างผลลัพธ์ใน SSMS สำหรับ "Actual Query Plan" เพื่อค้นหาข้อมูลนี้ สุดท้ายผมได้DBA.SE สืบค้น ไม่มีคำตอบใดที่นำไปสู่ มีใครบอกฉันได้บ้าง เป็นไปได้หรือไม่ที่จะค้นหาหรือวัดเวลาที่จำเป็นสำหรับการสร้างแผน

1
คำเตือนในแผนแบบสอบถาม“ Cardinality Estimate”
create table T(ID int identity primary key) insert into T default values insert into T default values go select cast(ID as varchar(10)) as ID from T where ID = 1 แบบสอบถามด้านบนมีคำเตือนในแผนแบบสอบถาม <Warnings> <PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT(varchar(10),[xx].[dbo].[T].[ID],0)" /> </Warnings> ทำไมถึงมีคำเตือน? นักแสดงในรายการฟิลด์จะมีผลต่อการประมาณค่า cardinality อย่างไร

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

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