คำถามติดแท็ก query-performance

สำหรับคำถามเกี่ยวกับการปรับปรุงประสิทธิภาพและ / หรือประสิทธิภาพของการสืบค้นฐานข้อมูล

4
เป็นไปได้ไหมที่จะเพิ่มประสิทธิภาพการสืบค้นในตารางแคบ ๆ ที่มีแถวนับล้านแถว
ฉันมีข้อความค้นหาที่ใช้เวลาโดยเฉลี่ย 2,500 มิลลิวินาทีในการดำเนินการให้เสร็จสมบูรณ์ ตารางของฉันแคบมาก แต่มี 44 ล้านแถว ฉันมีตัวเลือกอะไรบ้างในการปรับปรุงประสิทธิภาพหรือตัวเลือกนี้ดีเท่าที่ได้รับ คำค้นหา SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; โต๊ะ CREATE TABLE [dbo].[Heartbeats]( [ID] [int] IDENTITY(1,1) NOT NULL, [DeviceID] [int] NOT NULL, [IsPUp] [bit] NOT NULL, [IsWebUp] [bit] NOT NULL, [IsPingUp] [bit] NOT NULL, [DateEntered] [datetime] NOT NULL, …

5
ปรับปรุงประสิทธิภาพของ sys.dm_db_index_physical_stats
ในระหว่างงานซ่อมบำรุงฉันพยายามหารายการดัชนีแยกส่วน แต่แบบสอบถามช้ามากและใช้เวลากว่า 30 นาทีในการดำเนินการ ฉันคิดว่านี่เป็นเพราะการสแกนระยะไกลบน sys.dm_db_index_physical_stats มีวิธีใดบ้างที่จะเพิ่มความเร็วคิวรีต่อไปนี้: SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName, i.name AS TableIndexName FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat INNER JOIN sys.indexes i ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id WHERE phystat.avg_fragmentation_in_percent > 20 AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL ORDER BY phystat.avg_fragmentation_in_percent DESC ฉันไม่ใช่ DBA และอาจทำให้เกิดข้อผิดพลาดอย่างชัดเจนในแบบสอบถามด้านบนหรืออาจมีดัชนีหรือสถิติบางอย่างที่จะช่วยได้ บางทีมันอาจเป็นเพียงขนาดของฐานข้อมูล …

2
เหตุใดแบบสอบถามจึงทำงานช้าลงในกระบวนงานที่เก็บไว้กว่าในหน้าต่างแบบสอบถาม
ฉันมีแบบสอบถามที่ซับซ้อนซึ่งทำงานใน 2 วินาทีในหน้าต่างแบบสอบถาม แต่ประมาณ 5 นาทีเป็นกระบวนงานที่เก็บไว้ เหตุใดจึงใช้เวลานานกว่าจึงจะเรียกใช้เป็นกระบวนงานที่เก็บไว้ได้ นี่คือสิ่งที่แบบสอบถามของฉันดูเหมือน ใช้ชุดระเบียนเฉพาะ (ระบุโดย@idและ@createdDate) และกรอบเวลาที่เฉพาะเจาะจง (1 ปีเริ่มต้นจาก@startDate) และส่งกลับรายการสรุปของตัวอักษรที่ส่งและการชำระเงินโดยประมาณที่ได้รับเป็นผลมาจากตัวอักษรเหล่านั้น CREATE PROCEDURE MyStoredProcedure @id int, @createdDate varchar(20), @startDate varchar(20) AS SET NOCOUNT ON -- Get the number of records * .7 -- Only want to return records containing letters that were sent on 70% or more …

2
ดัชนีใดที่จะใช้กับค่าซ้ำจำนวนมาก
ลองทำข้อสมมติสองสามข้อ: ฉันมีตารางที่มีลักษณะดังนี้: a | b ---+--- a | -1 a | 17 ... a | 21 c | 17 c | -3 ... c | 22 ข้อเท็จจริงเกี่ยวกับชุดของฉัน: ขนาดของตารางทั้งหมดคือ ~ 10 10แถว ฉันมีแถว ~ 100k ที่มีค่าaในคอลัมน์aคล้ายกับค่าอื่น ๆ (เช่นc) นั่นหมายถึง ~ 100k ค่าที่แตกต่างในคอลัมน์ 'a' select sum(b) from t where a = 'c'ส่วนใหญ่เป็นคำสั่งของฉันจะอ่านทั้งหมดหรือส่วนใหญ่ของค่าสำหรับค่าที่กำหนดในเช่น …

1
เพิ่มประสิทธิภาพการสืบค้นฐานข้อมูลขนาดใหญ่ (25+ ล้านแถวโดยใช้ max () และ GROUP BY)
ฉันใช้ Postgres 9.3.5 และฉันมีตารางขนาดใหญ่ในฐานข้อมูลปัจจุบันมี 25 ล้านแถวและมีแนวโน้มที่จะใหญ่ขึ้นอย่างรวดเร็ว ฉันพยายามเลือกแถวที่เฉพาะเจาะจง (ทุกแถวมีเฉพาะแถวunit_idล่าสุดunit_timestampสำหรับแถวแต่ละแถว) ด้วยข้อความค้นหาง่ายๆเช่น: SELECT unit_id, max(unit_timestamp) AS latest_timestamp FROM all_units GROUP BY unit_id; ไม่มีดัชนีใด ๆ แบบสอบถามนี้ใช้เวลาประมาณ 35 วินาทีในการดำเนินการ ด้วยดัชนีที่กำหนด ( CREATE INDEX partial_idx ON all_units (unit_id, unit_timestamp DESC);) เวลาแบบสอบถามจะสั้นลงเป็นประมาณ (เท่านั้น) 19 วินาที ฉันสงสัยว่าจะเป็นไปได้หรือไม่ที่จะเรียกใช้คิวรีของฉันในเวลาที่น้อยลง (เช่นเพียงไม่กี่วินาที) และถ้าเป็นเช่นนั้นฉันควรทำตามขั้นตอนใดเพื่อปรับให้เหมาะสมยิ่งขึ้นไปอีก การถ่ายโอนข้อมูลโครงสร้างตารางของฉันมีลักษณะเช่นนี้: CREATE TABLE "all_units" ( "unit_id" int4 NOT NULL, …

1
เปรียบเทียบแบบสอบถามที่สองใน SQL Server 2012
ฉันกำลังเปรียบเทียบแบบสอบถามที่สองใน SQL Server 2012 เป้าหมายคือการใช้ข้อมูลที่เกี่ยวข้องทั้งหมดที่มีอยู่จากเครื่องมือเพิ่มประสิทธิภาพแบบสอบถามเมื่อเลือกแบบสอบถามที่ดีที่สุด ข้อความค้นหาทั้งสองรายการให้ผลลัพธ์ที่เหมือนกัน ลำดับสูงสุดสำหรับลูกค้าทั้งหมด การล้างบัฟเฟอร์พูลเสร็จก่อนดำเนินการค้นหาด้วย FREEPROCCACHE และ DROPCLEANBUFFERS ใช้ข้อมูลที่ให้ไว้ด้านล่างแบบสอบถามใดเป็นตัวเลือกที่ดีกว่า -- Query 1 - return the maximum order id for a customer SELECT orderid, custid FROM Sales.Orders AS O1 WHERE orderid = (SELECT MAX(O2.orderid) FROM Sales.Orders AS O2 WHERE O2.custid = O1.custid); -- Query 2 - return the …

3
สิ่งที่ดึงมาจากดิสก์ในระหว่างการสืบค้น?
คำถามธรรมดาค่อนข้างน่าจะมีคำตอบอยู่บ้าง แต่ฉันไม่สามารถสร้างคำถามค้นหาที่เหมาะสมสำหรับ Google ... จำนวนคอลัมน์ในตารางใดตารางหนึ่งมีผลต่อประสิทธิภาพของแบบสอบถามหรือไม่เมื่อทำการสอบถามในชุดย่อยของตารางนั้น ตัวอย่างเช่นหากตาราง Foo มี 20 คอลัมน์ แต่แบบสอบถามของฉันเลือกเพียง 5 คอลัมน์เหล่านั้นจะมีคอลัมน์ 20 (เทียบกับพูด 10) มีผลต่อประสิทธิภาพการค้นหาหรือไม่ สมมติว่าความเรียบง่ายนั้นมีอะไรรวมอยู่ใน WHERE clause ในคอลัมน์ 5 คอลัมน์เหล่านั้น ฉันกังวลเกี่ยวกับการใช้แคชบัฟเฟอร์ของ Postgres นอกเหนือจากดิสก์แคชของระบบปฏิบัติการ ฉันไม่เข้าใจการออกแบบที่จัดเก็บข้อมูลจริงของ Postgres ตารางถูกเก็บไว้ในหลาย ๆ หน้า (ขนาดเริ่มต้นที่ 8k ต่อหน้า) แต่ฉันไม่เข้าใจว่าจะมีการจัดเรียงทูเปิลอย่างไร PG ฉลาดพอที่จะดึงข้อมูลจากดิสก์ที่ประกอบด้วยคอลัมน์ 5 คอลัมน์เหล่านั้นได้หรือไม่

3
เหตุใดการเลือกคอลัมน์ผลลัพธ์ทั้งหมดของแบบสอบถามนี้จึงเร็วกว่าการเลือกคอลัมน์เดียวที่ฉันสนใจ
ฉันมีแบบสอบถามที่ใช้select *ไม่เพียง แต่อ่านน้อยลง แต่ยังใช้เวลา CPU น้อยกว่าการใช้select c.Fooอย่างมาก นี่คือแบบสอบถาม: select top 1000 c.ID from ATable a join BTable b on b.OrderKey = a.OrderKey and b.ClientId = a.ClientId join CTable c on c.OrderId = b.OrderId and c.ShipKey = a.ShipKey where (a.NextAnalysisDate is null or a.NextAnalysisDate < @dateCutOff) and b.IsVoided = 0 and …

2
ปัญหาการประมาณค่าเชิง Cardinality ของการเข้าร่วมวงใน
ฉันพยายามเข้าใจว่าทำไมการประมาณแถวจึงผิดอย่างยิ่งนี่คือกรณีของฉัน: เข้าร่วมง่าย - โดยใช้ SQL Server 2016 sp2 (ปัญหาเดียวกันใน sp1), dbcompatiblity = 130 select Amount_TransactionCurrency_id, CurrencyShareds.id from CurrencyShareds INNER JOIN annexes ON Amount_TransactionCurrency_id = CurrencyShareds.Id option (QUERYTRACEON 3604, QUERYTRACEON 2363); SQL ประมาณ 1 แถวโดยที่ 107131 และเลือกวนซ้ำซ้อนกัน ( ลิงก์ไปยังแผน ) หลังจากอัปเดตสถิติใน CurrencyShared แล้วการประมาณการก็ใช้ได้และการเลือกผสานเข้าร่วม ( ลิงก์ไปยังแผนใหม่ ) ทันทีที่มีการเพิ่มเพียงหนึ่งระเบียนใน CurrencyShareds สถิติก็จะกลายเป็น "เก่า" และ …

4
ฉันจะแปลงจำนวนเต็มบวก 100 ล้านตัวแรกเป็นสตริงได้อย่างไร
นี่คือการเบี่ยงเบนจากปัญหาจริง หากการจัดเตรียมบริบทช่วยให้การสร้างข้อมูลนี้อาจเป็นประโยชน์สำหรับวิธีการทดสอบประสิทธิภาพของการประมวลผลสตริงสำหรับการสร้างสตริงที่ต้องมีการดำเนินการบางอย่างที่นำไปใช้กับพวกเขาภายในเคอร์เซอร์หรือสำหรับการสร้างชื่อเฉพาะ ฉันแค่สนใจวิธีที่มีประสิทธิภาพในการสร้างข้อมูลภายในเซิร์ฟเวอร์ SQL โปรดอย่าถามว่าทำไมฉันจึงต้องสร้างข้อมูลนี้ ฉันจะพยายามเริ่มด้วยคำนิยามที่ค่อนข้างเป็นทางการ สตริงจะรวมอยู่ในชุดข้อมูลหากประกอบด้วยตัวอักษรพิมพ์ใหญ่จาก A - Z เทอมแรกของชุดคือ "A" ชุดประกอบด้วยสตริงที่ถูกต้องทั้งหมดเรียงตามความยาวก่อนและตามลำดับตัวอักษรทั่วไปที่สอง หากสายอยู่ในตารางในคอลัมน์ที่เรียกว่าSTRING_COLคำสั่งซื้อจะถูกกำหนดไว้ใน T-SQL ORDER BY LEN(STRING_COL) ASC, STRING_COL ASCเป็น เพื่อให้คำจำกัดความที่เป็นทางการน้อยลงให้ดูที่ส่วนหัวคอลัมน์ตามตัวอักษรใน excel ชุดเป็นรูปแบบเดียวกัน ลองพิจารณาว่าคุณจะแปลงจำนวนเต็มเป็นฐาน 26 ได้อย่างไร: 1 -> A, 2 -> B, 3 -> C, ... , 25 -> Y, 26 -> Z, 27 -> AA, 28 -> AB, …

2
SELECT TOP 1 เป็นอันตรายต่อประสิทธิภาพการค้นหา มีวิธีเข้าถึง dba เพื่อเอาชนะสิ่งนี้หรือไม่
ในแอปพลิเคชันที่ใช้งานจริง (C # กำลังพูดคุยกับ SQL Server 2014 Standard) มีข้อความค้นหาที่มีลักษณะดังนี้ด้านล่าง เวลาส่วนใหญ่จะทำงานในหน่วยมิลลิวินาที แต่บางครั้ง (สำหรับค่าบางอย่าง@Id) มันจะไปถั่วและใช้เวลาประมาณหนึ่งนาที นี่เป็นเวลานานกว่าการหมดเวลาของแอปดังนั้นแอปจึงล้มเหลวสำหรับผู้ใช้ ในกรณี "go nuts" ชุดผลลัพธ์ที่ส่งคืนจะว่างเปล่าอย่างถูกต้องเนื่องจากอยู่ในหลาย ๆ กรณี แต่ไม่ใช่ทุกกรณี โชคดีที่สิ่งนี้สามารถทำซ้ำได้ทั้งในสภาพแวดล้อมการผลิตและการพัฒนา นักพัฒนาซอฟต์แวร์แจ้งว่าการลบ "TOP 1" ออกจากคำค้นหาจากนั้นตรวจสอบให้แน่ใจว่าแอปนั้นใช้แถวเพิ่มเติมของชุดผลลัพธ์เพื่อล้างปัญหาด้านประสิทธิภาพ ตัววางแผนคิวรีไม่แนะนำดัชนีเมื่อTOP 1มีอยู่ (ใน dev) กำลังเปลี่ยนคิวรีและแก้ไขแอปอยู่ในระหว่างดำเนินการ การเปิดตัวใช้เวลาสักครู่ คำถามของฉัน:มีวิธีใดบ้างที่สามารถเข้าถึง DBA ในการปรับแต่งหรือปรับแต่งอินสแตนซ์ SQL Server ที่ใช้งานได้เพื่อแก้ไขปัญหานี้ก่อนที่แอพจะเปลี่ยนด้วยการสืบค้นใหม่ SELECT TOP 1 subscription_id FROM subscription AS sub JOIN billing_info AS bi …

3
CXPACKET สูงและ LATCH_EX กำลังรอ
ฉันมีปัญหาด้านประสิทธิภาพกับระบบประมวลผลข้อมูลที่ฉันกำลังทำงานอยู่ ฉันได้รวบรวมสถิติการรอจากเวลาหนึ่งชั่วโมงที่แสดง CXPACKET และ LATCH_EX รอเหตุการณ์จำนวนมาก ระบบประกอบด้วยการประมวลผล SQL เซิร์ฟเวอร์ 3 เครื่องซึ่งมีจำนวนการกระทืบและการคำนวณจำนวนมากจากนั้นป้อนข้อมูลลงในเซิร์ฟเวอร์คลัสเตอร์กลาง เซิร์ฟเวอร์ประมวลผลสามารถมีงานได้ถึง 6 งานในแต่ละครั้ง สถิติการรอเหล่านี้มีไว้สำหรับคลัสเตอร์กลางซึ่งฉันคิดว่าเป็นสาเหตุของปัญหาคอขวด เซิร์ฟเวอร์คลัสเตอร์ส่วนกลางมี 16 คอร์และ 64GB RAM MAXDOP ถูกตั้งค่าเป็น 0 ฉันเดาว่า CXPACKET นั้นมาจากการสืบค้นหลายขนานที่ทำงานอยู่ แต่ฉันไม่แน่ใจว่าสิ่งที่ LATCH_EX รอเหตุการณ์ระบุไว้ จากสิ่งที่ฉันได้อ่านนี้อาจเป็นการรอแบบไม่บัฟเฟอร์? ทุกคนสามารถแนะนำสาเหตุของการรอคอยสถิติเหล่านี้ได้อย่างไรและฉันควรดำเนินการอย่างไรเพื่อตรวจสอบสาเหตุที่แท้จริงของปัญหาประสิทธิภาพการทำงานนี้ ผลลัพธ์ข้อความค้นหายอดนิยมคือสถิติการรอคอยทั้งหมดและผลลัพธ์ข้อความค้นหาด้านล่างคือสถิติในช่วงเวลา 1 ชั่วโมง

5
เพจจิ้งทำงานกับ ROW_NUMBER ใน SQL Server ได้อย่างไร
ฉันมีEmployeeตารางที่มีหนึ่งล้านบันทึก ฉันได้ติดตาม SQL สำหรับข้อมูลการเพจในเว็บแอปพลิเคชัน มันทำงานได้ดี อย่างไรก็ตามสิ่งที่ฉันเห็นว่าเป็นปัญหาคือ - ตารางที่ได้รับtblEmployeeจะเลือกระเบียนทั้งหมดในEmployeeตาราง (เพื่อสร้าง MyRowNumberค่า) ฉันคิดว่านี่เป็นสาเหตุของการเลือกระเบียนทั้งหมดในEmployeeตาราง มันใช้งานได้จริงเหรอ? หรือ SQL Server นั้นได้รับการปรับแต่งให้เลือกเฉพาะ 5 ระเบียนจากEmployeeตารางต้นฉบับด้วยหรือไม่ DECLARE @Index INT; DECLARE @PageSize INT; SET @Index = 3; SET @PageSize = 5; SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY EmpID asc) as MyRowNumber,* FROM Employee) tblEmployee WHERE MyRowNumber BETWEEN …

5
SentryOne Plan Explorer ทำงานหรือไม่
ไม่SentryOne แผน Explorer ในการทำงานตามที่โฆษณาและมันเป็นเรื่องที่ถูกต้อง? มี gotchas หรืออะไรที่ต้องกังวล? ดูเหมือนว่ามันจะแสดงเส้นทางร้อนในสีซึ่งเทียบกับฝันร้ายของ SSMS สำหรับแผนการดำเนินการโดยประมาณ ความกังวลของฉันคือ - มันแก้ไขข้อมูลใด ๆ ที่เป็นอันตรายหรือไม่? แก้ไข : ฉันเพิ่งได้ยินมันและไม่เคยได้ยิน บริษัท มาก่อน

1
ทำไมดัชนีการเลือกรองไม่ได้ใช้เมื่อตัวกรองส่วนคำสั่ง where บน value () `?
ติดตั้ง: create table dbo.T ( ID int identity primary key, XMLDoc xml not null ); insert into dbo.T(XMLDoc) select ( select N.Number for xml path(''), type ) from ( select top(10000) row_number() over(order by (select null)) as Number from sys.columns as c1, sys.columns as c2 ) as N; ตัวอย่าง XML …

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