סודות האופטימייזר<br />מיכאל זילברשטיין| DBArt LTD<br />Michael@DBArt.co.il<br />
SQL Server components<br />תהליך Query Processing. <br />נא להכיר – אופטימייזר ותפקידו בכוח.<br />שלבי האופטימיזציה.<br />...
שאלת טיזר<br />
SQL Server components<br />
תהליך Query Processing<br />
נא להכיר – אופטימייזר ותפקידו בכוח<br />תפקידו של אופטימייזר – למצוא execution plan יעיל לכל שאילתה בפרוצדורה או ב-batch.<...
Trivial plan<br />איטרציה ראשונה (cost < 0.2)<br />איטרציה שנייה (cost < 1.0)<br />איטרציה שלישית<br />אם (cost > 5) – לשק...
***Trace flag 2301<br /> מוסיף ל-Optimizer יכולות (אופציות) נוספות. על חשבון זמן אופטימיזציה! להשתמש בזהירות!!!<br />"Went...
Query Execution and Memory<br />חלק מהפעולות אינן דורשות זכרון (nested loops, merge, filter וכו').<br />חלק אחר דווקא כן (...
איפה אנחנו נופלים?<br />
איפה אנחנו נופלים?<br />
ברוב רובם של המקרים אופטימייזר עושה עבודה מעולה. וגם ממשיך להשתפר מגרסה לגרסה.<br />יש מספר מקרים בהם אופטימייזר לא מצליח ...
זוכרים Query cost?<br /><ul><li>Query cost = CPU cost + IO Cost
מספרים קבועים לכל שורה או page אך שונים מאופרטור לאופרטור. למשל עבור Clustered Index Scan:
CPU cost עבור שורה ראשונה = 0.0001581
CPU cost עבור כל שורה משניה והלה = 0.0000011
Upcoming SlideShare
Loading in...5
×

4 sql explore סודות האופטימייזר

722

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
722
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "4 sql explore סודות האופטימייזר"

  1. 1. סודות האופטימייזר<br />מיכאל זילברשטיין| DBArt LTD<br />Michael@DBArt.co.il<br />
  2. 2. SQL Server components<br />תהליך Query Processing. <br />נא להכיר – אופטימייזר ותפקידו בכוח.<br />שלבי האופטימיזציה.<br />Query Execution and Memory<br />איפה אנחנו נופלים?<br />סיכום.<br />
  3. 3. שאלת טיזר<br />
  4. 4. SQL Server components<br />
  5. 5. תהליך Query Processing<br />
  6. 6. נא להכיר – אופטימייזר ותפקידו בכוח<br />תפקידו של אופטימייזר – למצוא execution plan יעיל לכל שאילתה בפרוצדורה או ב-batch.<br />Cost-based Optimizer. כלומר מחפש execution plan הכי "זול".<br />מטרה: להחזיר את כל התוצאה כמה שיותר מהר.<br />למצוא execution plan הכי יעיל שיש יכול לקחת זמן. לכן מחפש איזון בין תהליך האופטימיזציה לבין ביצוע.<br />
  7. 7. Trivial plan<br />איטרציה ראשונה (cost < 0.2)<br />איטרציה שנייה (cost < 1.0)<br />איטרציה שלישית<br />אם (cost > 5) – לשקול parallel plans<br />שלבי האופטימיזציה<br />
  8. 8. ***Trace flag 2301<br /> מוסיף ל-Optimizer יכולות (אופציות) נוספות. על חשבון זמן אופטימיזציה! להשתמש בזהירות!!!<br />"Went live with 2008, -T2301 killed us" <br />Brent Ozar<br />שלבי האופטימיזציה<br />
  9. 9. Query Execution and Memory<br />חלק מהפעולות אינן דורשות זכרון (nested loops, merge, filter וכו').<br />חלק אחר דווקא כן (hash join, sort, spool)<br />הקצאת זכרון מתבצעת בתחילת ביצוע השאילתה על-סמך חישוב שמתבסס על ה-execution plan שאופטימייזר הכין.<br />מה קורה כאשר פתאום מגלים שצריך עוד זכרון?<br />כותבים ל-tempdb!<br />מה אם אין מספיק זכרון פנוי?<br />השאילתה תמתין. RESOURCE_SEMAPHORE<br />
  10. 10. איפה אנחנו נופלים?<br />
  11. 11. איפה אנחנו נופלים?<br />
  12. 12. ברוב רובם של המקרים אופטימייזר עושה עבודה מעולה. וגם ממשיך להשתפר מגרסה לגרסה.<br />יש מספר מקרים בהם אופטימייזר לא מצליח למצוא execution plan טוב. חלקם בגלל מגבלותיו, חלקם בגלל באגים, חלקם בגלל התפלגות נתונים שונה ומשונה.<br />כדאי להכיר גם את מגבלותיו של האופטימייזר אבל בעיקר – התפלגות נתונים במסד נתונים שלכם.<br />May the (Optimizer’s) force be with you<br />
  13. 13. זוכרים Query cost?<br /><ul><li>Query cost = CPU cost + IO Cost
  14. 14. מספרים קבועים לכל שורה או page אך שונים מאופרטור לאופרטור. למשל עבור Clustered Index Scan:
  15. 15. CPU cost עבור שורה ראשונה = 0.0001581
  16. 16. CPU cost עבור כל שורה משניה והלה = 0.0000011
  17. 17. IO cost עבור page ראשון = 0.003125
  18. 18. IO cost עבור כל page משניה והלה = 0.00074074</li></ul>מסכנה: אפשר לסמוך על estimated cost רק בערבון מוגבל.<br />
  19. 19. References<br />Itzik Ben-Gan “Inside Microsoft SQL Server 2005 T-SQL Querying”<br />http://www.benjaminnevarez.com/<br />http://blogs.msdn.com/b/psssql/archive/2011/04/29/why-does-this-query-consumes-so-much-cpu.aspx<br />http://sqlblog.com/blogs/adam_machanic/archive/2011/04/13/how-queries-are-processed-a-month-of-activity-monitoring-part-13-of-30.aspx<br />
  20. 20. References<br />http://connect.microsoft.com/SQLServer/feedback/details/587729/query-optimizer-create-a-bad-plan-when-is-not-null-predicate-is-used#details<br />http://blogs.msdn.com/b/ianjo/archive/2006/04/24/582219.aspx<br />http://sqlblog.com/blogs/ben_nevarez/archive/2010/02/17/the-query-optimizer-and-cost-estimation.aspx<br />

×