คำถามติดแท็ก parallelism

ลดเวลาในการรันโดยการแบ่งปัญหาออกเป็นส่วน ๆ ที่สามารถดำเนินการให้เสร็จสิ้นได้โดยแยกเส้นทางการดำเนินการพร้อมกัน

4
แบบสอบถาม PostgreSQL เดียวสามารถใช้หลายคอร์ได้หรือไม่?
ในรุ่นล่าสุดของ PostgreSQL (ณ เดือนธันวาคม 2013) เราสามารถแบ่งปันแบบสอบถามระหว่างสองคอร์หรือมากกว่านั้นเพื่อรับประสิทธิภาพที่เพิ่มขึ้นได้หรือไม่ หรือเราควรจะได้รับแกนเร็วขึ้น?

2
มีวิธีการป้องกันไม่ให้ Scalar UDFs ในคอลัมน์ที่คำนวณได้จากการยับยั้งความเท่าเทียมกันหรือไม่?
มีการเขียนมากมายเกี่ยวกับภัยของ Scalar UDFใน SQL Server การค้นหาทั่วไปจะส่งคืนผลลัพธ์จำนวนมาก มีสถานที่บางแห่งที่ Scalar UDF เป็นตัวเลือกเท่านั้น เป็นตัวอย่าง: เมื่อจัดการกับ XML: XQuery ไม่สามารถใช้เป็นข้อกำหนดคอลัมน์ที่คำนวณได้ ทางเลือกหนึ่งที่มีการบันทึกโดย Microsoft คือการใช้Scalar UDFเพื่อแค็ปซูล XQuery ของคุณใน Scalar UDF จากนั้นใช้ในคอลัมน์ที่คำนวณ สิ่งนี้มีเอฟเฟกต์ต่าง ๆ และวิธีแก้ปัญหาบางอย่าง ดำเนินการทีละแถวเมื่อมีการสอบถามตาราง บังคับให้คิวรีทั้งหมดกับตารางทำงานแบบอนุกรม คุณสามารถหลีกเลี่ยงการประมวลผลแบบแถวต่อแถวได้โดยการกำหนดฟังก์ชันและคงคอลัมน์ที่คำนวณไว้หรือสร้างดัชนี ไม่มีวิธีใดที่สามารถป้องกันการบังคับให้ลำดับของเคียวรีที่กดปุ่มตารางแม้ว่าสเกลาร์ UDF ไม่ได้ถูกอ้างอิง มีวิธีที่รู้จักกันในการทำเช่นนั้น?

2
จำเป็นต้องเข้าใจข้อผิดพลาดในการดำเนินการแบบสอบถามแบบขนาน
วันนี้เราประสบกับประสิทธิภาพที่ลดลงในเซิร์ฟเวอร์ sql ของเรา ทำให้เวลานี้เกิดขึ้นเราบันทึก"The query processor could not start the necessary thread resources for parallel query execution"ข้อผิดพลาดหลายครั้ง การอ่านที่ฉันทำแสดงให้เห็นว่าสิ่งนี้เกี่ยวข้องกับจำนวน CPU ที่ใช้เมื่อดำเนินการคิวรีที่ซับซ้อน CPU Utilization was only at 7%แต่เมื่อตรวจสอบในระหว่างการหยุดทำงานของเรา มีอะไรอีกบ้างที่อ้างอิงเช่นนี้ที่ฉันยังไม่ได้เจอ? นี่เป็นสาเหตุของการเสื่อมประสิทธิภาพหรือไม่หรือว่าฉันกำลังไล่ต้อนปลาเฮอริ่งแดง? ค่า sp_configure ของฉันสำหรับสิ่งนี้มีดังนี้: name minimum maximum config_value run_value cost threshold for parallelism 0 32767 5 5

1
sp_cursoropen และขนาน
ฉันพบปัญหาด้านประสิทธิภาพด้วยข้อความค้นหาที่ฉันไม่สามารถเข้าใจได้ ฉันดึงแบบสอบถามออกจากคำจำกัดความของเคอร์เซอร์ แบบสอบถามนี้ใช้เวลาไม่กี่วินาทีในการดำเนินการ SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

3
การอัพเดตสถิติแบบขนาน
ใน SQL Server 2008 หรือใหม่กว่าUPDATE STATISTICS WITH FULLSCANการดำเนินการแบบเธรดเดียวหรือสามารถใช้การขนานได้หรือไม่ วิธีการเกี่ยวกับสถิติการปรับปรุงด้วยการสุ่มตัวอย่างเริ่มต้น - มันสามารถใช้ขนานกันได้อย่างไร ฉันไม่เห็นตัวเลือกที่ระบุMAXDOPด้วยสถิติการอัปเดต

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

2
ฉันสามารถ refactor แบบสอบถามนี้เพื่อให้ทำงานในแบบคู่ขนานได้หรือไม่
ฉันมีแบบสอบถามที่ใช้เวลาประมาณ 3 ชั่วโมงในการทำงานบนเซิร์ฟเวอร์ของเรา - และมันไม่ได้ใช้ประโยชน์จากการประมวลผลแบบขนาน (ประมาณ 1.15 ล้านระเบียนในdbo.Deidentified300 ระเบียนในdbo.NamesMultiWord) เซิร์ฟเวอร์มีการเข้าถึง 8 คอร์ UPDATE dbo.Deidentified WITH (TABLOCK) SET IndexedXml = dbo.ReplaceMultiWord(IndexedXml), DE461 = dbo.ReplaceMultiWord(DE461), DE87 = dbo.ReplaceMultiWord(DE87), DE15 = dbo.ReplaceMultiWord(DE15) WHERE InProcess = 1; และReplaceMultiwordเป็นกระบวนการที่กำหนดเป็น: SELECT @body = REPLACE(@body,Names,Replacement) FROM dbo.NamesMultiWord ORDER BY [WordLength] DESC RETURN @body --NVARCHAR(MAX) การเรียกร้องให้ReplaceMultiwordป้องกันการก่อตัวเป็นแผนขนานหรือไม่ มีวิธีที่จะเขียนสิ่งนี้เพื่อให้มีความเท่าเทียมกันหรือไม่? ReplaceMultiword …

4
การจัดการกับ CXPACKET รอ - ตั้งค่าขีด จำกัด ต้นทุนสำหรับการขนาน
จากการติดตามคำถามก่อนหน้านี้เกี่ยวกับการแก้ไขปัญหาเว็บไซต์ SharePointอย่างสมบูรณ์ฉันสงสัยว่าฉันสามารถทำบางสิ่งเกี่ยวกับ CXPACKET ได้หรือไม่ ฉันรู้ว่าวิธีแก้ปัญหาข้อเข่ากระตุกคือการปิดความขนานทั้งหมดโดยการตั้งค่า MAXDOP เป็น 1 - ฟังดูเหมือนเป็นความคิดที่ไม่ดี แต่แนวคิดอื่นคือการเพิ่มเกณฑ์ต้นทุนก่อนที่จะเริ่มขนานกันเริ่มต้นที่ 5 สำหรับต้นทุนของแผนการดำเนินการค่อนข้างต่ำ ดังนั้นฉันจึงสงสัยว่ามีคำถามที่เขียนไว้แล้วว่าจะพบคำค้นหาที่มีค่าใช้จ่ายแผนปฏิบัติการสูงที่สุด (ฉันรู้ว่าคุณสามารถค้นหาสิ่งที่มีระยะเวลาดำเนินการสูงสุดและอื่น ๆ ได้) แต่เป็นต้นทุนแผนปฏิบัติการที่เรียกคืนได้ ด้วยหรือไม่) และนั่นก็จะบอกฉันด้วยว่ามีการดำเนินการค้นหาแบบขนานหรือไม่ ใครบ้างมีสคริปต์ดังกล่าวในมือหรือสามารถชี้ให้ฉันไปในทิศทางของมุมมอง DMV, DMF หรือแคตตาล็อกระบบอื่น ๆ ที่เกี่ยวข้องเพื่อค้นหาสิ่งนี้?

3
เหตุใดแบบสอบถามรวมจึงเร็วขึ้นอย่างมากเมื่อใช้ GROUP BY clause มากกว่าไม่มี
ฉันแค่อยากรู้ว่าเหตุใดแบบสอบถามโดยรวมจึงทำงานเร็วขึ้นมากโดยมีGROUP BYประโยคมากกว่าไม่มี ตัวอย่างเช่นแบบสอบถามนี้ใช้เวลาเกือบ 10 วินาทีในการเรียกใช้ SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 ในขณะนี้อันนี้ใช้เวลาน้อยกว่าหนึ่งวินาที SELECT MIN(CreatedDate) FROM MyTable WHERE SomeIndexedValue = 1 GROUP BY CreatedDate มีเพียงหนึ่งเดียวCreatedDateในกรณีนี้ดังนั้นคิวรีที่จัดกลุ่มจะส่งคืนผลลัพธ์เดียวกับกลุ่มที่ไม่ได้จัดกลุ่ม ฉันสังเกตเห็นแผนการดำเนินการสำหรับแบบสอบถามที่สองจะแตกต่างกัน - แบบสอบถามที่สองใช้ Parallelism ในขณะที่แบบสอบถามแรกไม่ เป็นเรื่องปกติหรือไม่ที่เซิร์ฟเวอร์ SQL จะประเมินคิวรีแบบรวมแตกต่างกันถ้ามันไม่มี GROUP BY clause? และมีสิ่งที่ฉันสามารถทำได้เพื่อปรับปรุงประสิทธิภาพของแบบสอบถามที่ 1 โดยไม่ต้องใช้GROUP BYคำสั่งหรือไม่ แก้ไข ฉันเพิ่งเรียนรู้ว่าฉันสามารถใช้OPTION(querytraceon 8649)ในการตั้งค่าใช้จ่ายค่าใช้จ่ายของความเท่าเทียมเป็น 0 ซึ่งทำให้แบบสอบถามใช้ความเท่าเทียมและลดรันไทม์เป็น 2 วินาทีแม้ว่าฉันจะไม่รู้ว่ามีข้อเสียในการใช้คำใบ้แบบสอบถามนี้หรือไม่ SELECT MIN(CreatedDate) …

2
MAXDOP = 1, คำแนะนำการสืบค้นและเกณฑ์ค่าใช้จ่ายสำหรับความเท่าเทียม
หากมีการMAXDOPตั้งค่าอินสแตนซ์ที่ 1 และคำแนะนำแบบสอบถามถูกใช้เพื่ออนุญาตให้แบบสอบถามเฉพาะขนานกันเป็นเกณฑ์ต้นทุนสำหรับค่า Parallelism ที่ SQL ยังคงใช้เพื่อตัดสินใจว่าจริงหรือไม่ขนานกันหรือไม่ ฉันไม่สามารถขุดข้อมูลเฉพาะนี้ได้แม้ว่าลิงก์นี้แสดงให้เห็นว่า CTFP จะถูกเพิกเฉยถ้าMAXDOPเป็น 1 สิ่งนี้สมเหตุสมผลโดยไม่มีคำแนะนำแบบสอบถามเนื่องจากไม่มีการร้องขอโดยไม่คำนึงถึงต้นทุนจะขนานกันเมื่อMAXDOPเป็น 1 ใครช่วยให้ฉันรู้ว่าพฤติกรรมที่คาดหวังของคำขอทั้งสองนี้จะเป็นอย่างไร ตัวอย่างที่ 1: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 30 ตัวอย่างที่ 2: Instance Maxdop: 1 CTFP: 50 Query hint: Maxdop=2 Query cost: 70

3
แปลงฟังก์ชัน Scalar เป็นฟังก์ชัน TVF สำหรับการประมวลผลแบบขนาน - ยังคงทำงานในโหมดอนุกรม
หนึ่งในแบบสอบถามของฉันทำงานในโหมดการดำเนินการแบบอนุกรมหลังจากวางจำหน่ายและฉันสังเกตเห็นว่ามีการใช้ฟังก์ชันใหม่สองรายการในมุมมองซึ่งอ้างอิงใน LINQ ไปยัง SQL Query ที่สร้างขึ้นจากแอปพลิเคชัน ดังนั้นฉันจึงแปลงฟังก์ชัน SCALAR เหล่านั้นเป็นฟังก์ชั่น TVF แต่คำถามก็ยังคงทำงานอยู่ในโหมดอนุกรม ก่อนหน้านี้ฉันได้แปลง Scalar เป็น TVF ในข้อความค้นหาอื่นและแก้ปัญหาการบังคับให้เรียกใช้งานอนุกรม นี่คือฟังก์ชันสเกลาร์: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER …

2
หากการหยุดชะงักของเหตุการณ์ Parallelism Exchange นั้นน้อยกว่าเหยื่อจะเป็นปัญหาหรือไม่?
เราเห็นจำนวนDeadlocks แบบขนานภายในเธรดเหล่านี้จำนวนมากในสภาพแวดล้อมการผลิตของเรา (SQL Server 2012 SP2 - ใช่ ... ฉันรู้ ... ) อย่างไรก็ตามเมื่อดู Deadlock XML ที่ถูกบันทึกผ่าน Extended Events รายการเหยื่อนั้นว่างเปล่า <victim-list /> deadlocking ปรากฏอยู่ระหว่าง 4 กระทู้สองกับสองกับWaitType="e_waitPipeNewRow"WaitType="e_waitPipeGetRow" <resource-list> <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19"> <owner-list> <owner id="process4649868" /> </owner-list> <waiter-list> <waiter id="process40eb498" /> </waiter-list> </exchangeEvent> <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21"> <owner-list> <owner id="process368ecf8" /> </owner-list> …

2
การสนับสนุน Parallel Scalar UDF เป็นการร้องขอคุณสมบัติที่เหมาะสมหรือไม่?
มีการบันทึกไว้ค่อนข้างดีว่าสเกลาร์ของ UDF เป็นแผนอนุกรมโดยรวม ฟังก์ชั่นที่ทำงานในแบบคู่ขนาน เมื่อมีจำนวนแถวเข้ามาในจุดที่ต้องคำนวณ UDF ทำไมเครื่องยนต์ไม่สามารถกระจายไปยังโปรเซสเซอร์ได้ หากไม่มีสถานะใน UDF คำสั่งนั้นไม่ควรสำคัญ มีการเรียกร้องเกี่ยวกับ UDF ที่เป็นกล่องดำจะต้องใช้เคอร์เซอร์ ฉันเห็นว่าเคอร์เซอร์ผู้ใช้ไม่สามารถทำให้ขนานภายใน SP สำหรับกรณีที่บางสถานะถูกเก็บรักษาไว้ระหว่างการทำซ้ำ แต่ดูเหมือนว่าควรจะเป็นแบบขนาน คะแนนพิเศษสำหรับการอธิบายว่าทำไมเครื่องยนต์บังคับให้แผนทั้งหมดเป็นอนุกรมแทนที่จะเป็นเพียงขั้นตอนการคำนวณ UDF การสนับสนุน UDF แบบขนานเป็นคุณสมบัติที่เหมาะสมในการร้องขอหรือไม่

2
การใช้หลายคอร์สำหรับเคียวรี MySQL เดี่ยวบน Debian
ฉันใช้เซิร์ฟเวอร์ MySQL สำหรับการทดสอบบน VM (VMWare) กับ Debian ในฐานะแขกของระบบปฏิบัติการ แขกมีคอร์ CPU ที่จำลองสี่แกนดังนั้นฉันจึงตั้งค่า thread_concurrency เป็นสี่ ฉันกำลังทำร่วมราคาแพงบนโต๊ะขนาดใหญ่ซึ่งอาจใช้เวลาหลายนาที แต่ฉันเห็นในระบบปฏิบัติการของแขกว่ามีเพียงหนึ่งคอร์เท่านั้นที่ใช้ในแต่ละครั้ง สิ่งนี้เกิดขึ้นโดยไม่คำนึงถึงเอ็นจิ้นการจัดเก็บที่ใช้สำหรับตารางที่เกี่ยวข้อง (ทดสอบกับ MyISAM และ InnoDB) นอกจากนี้ฐานข้อมูลทั้งหมดดูเหมือนจะถูกบล็อกเมื่อทำการสอบถามขนาดใหญ่เหล่านี้ฉันไม่สามารถทำแบบสอบถามเพิ่มเติมใด ๆ ในแบบคู่ขนาน แสดงว่า htop แปลก ๆ ที่แกนกลางที่ใช้สำหรับคิวรีนั้นเปลี่ยนไปในระหว่างรันไทม์ของคิวรี! ทำไมสิ่งนี้ถึงเกิดขึ้น นี่คือรายการที่เกี่ยวข้องจากSHOW FULL PROCESSLIST;(ไม่มีคำสั่งอื่น ๆ ): | 153 | root | localhost | pulse_stocks | Query | 50 | Copying to tmp …

2
ฉันจะกำจัดสาขาคู่ขนานที่ไม่มีประโยชน์ได้อย่างไรเมื่อยกเลิกการตรึงแถวเดียว
ลองพิจารณาคำถามต่อไปนี้ที่ไม่ได้รวมจำนวนสเกลาร์จำนวนไม่กี่ตัว: SELECT A, B FROM ( SELECT MAX(CASE WHEN ID = 1 THEN 1 ELSE 0 END) VAL1 , MAX(CASE WHEN ID = 2 THEN 1 ELSE 0 END) VAL2 , MAX(CASE WHEN ID = 3 THEN 1 ELSE 0 END) VAL3 , MAX(CASE WHEN ID = 4 THEN 1 …

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