• Save
4   sql explore סודות האופטימייזר
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 911 views

 

Statistics

Views

Total Views
911
Views on SlideShare
732
Embed Views
179

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 179

http://www.sqlserver.co.il 179

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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