Title: SQL Server 2000 (
1SQL Server 2000 ( 7.0)Execution Plan Cost
Formulas
- Joe Chang
- jchang6_at_yahoo.com
- www.sql-server-performance.com/joe_chang.asp
2Database Performance
- Code
- Tables, Indexes, Constraints, SQL statements
- Data
- Total rows, Rows involved, Statistics
- Execution Plan
- Formulas used by the CBO
- Server Architecture
- Processor, SMP, etc
3Topics
- Component Operation Cost Model
- Cost formulas for basic operations
- Dependencies
- Rows Pages involved - yes
- Index depth no,
- Locks level no
- WHERE conditions no cost for logic
- only if row count affected
4Index Seek - 1 row
SELECT xx FROM N1C WHERE ID _at_ID
I/O CPU Total 1GB 0.0063285000 0.0000796
0.006408100 gt 1GB 0.0032034251 0.0000796
0.003283025
5Index Seek Cost Formula
Multiple rows, 1GB I/O 0.00632850
0.00074074 per additional page CPU 0.00007960
0.00000110 per additional row Total 0.00640810
0.00074074 /add. Page 0.0000011 / add. row
6Plan Cost Unit of Measure
- Time? CPU-usage? time, in seconds
Too fast for 7200RPM disk random I/Os.
0.0062500sec -gt 160/sec 0.000740741 -gt1350/sec
(8KB) -gt169/sec(64K)-gt 10.8MB/sec
About right for 1997 sequential disk transfer
rate?
S2K BOL Administering SQL Server, Managing
Servers, Setting Configuration Options cost
threshold for parallelism Option Query cost
refers to the estimated elapsed time, in seconds,
required to execute a query on a specific
hardware configuration.
S2K5 BOL Administering SQL Server, Managing
Servers, Setting Configuration Options cost
threshold for parallelism Option The cost refers
to an estimated elapsed time in seconds required
to run the serial plan on a specific hardware
configuration.
7Disk Drive Performance
Access time rotational latency seek
time 7200RPM 4.17ms Rotational Latency 10000RPM
3ms, 15000RPM 2ms Rot. Avg. Sequential Yea
r Model RPM Seek Transfer 1994 ST12550 7.2K 8.0
3.5-6.0 MB/sec 1996 ST34371 7.2K
9.4 7.1-11.7 1997 ST34572 7.2K 9.4 7.9-12.5 1998
ST39102 10K 5.4 19.0-28.9 1999 ST39103 10K 5.4 2
2.7-36.2 2000 ST318451 15K 4.1 37.4-48.9 2002
ST373453 15K 3.8 49-75
8Bookmark Lookup Single Row
SQL Server 2000 up to SP3 (build 760)
SQL Server 2000 after MS03-031 (build 818)
Same cost for bookmark lookup on Heap and
Clustered Index
9Detail
up to SP3 (build 760)
after MS03-031 (build 818)
10BL Plan Cost Single Row
up to SP3 (build 760)
I/O CPU Total 1GB 0.0062500001
0.0000011 0.0062511 gt 1GB 0.0031249251
0.0000011 0.0031260
after MS03-031 (build 818)
I/O CPU 1GB 0.000097656251
0.0000011 gt 1GB 0.000048826954 0.0000011
11Bookmark Lookup Multiple Rows
CPU cost 0.0000011 per applies in all cases
I/O Cost up to SP3 (build 760)
For table size up to approx. 100 pages, I/O cost
is bounded by the number of pages, representing
an estimate of of I/O required, at cost
0.0062500 / page For larger tables, I/O cost is
not bounded by the number of pages
after MS03-031 (build 818)
A lower I/O cost per page (0.00009765625) for up
to 64 rows, original I/O cost applies at 65 rows
and above
12Bookmark Lookup I/O Cost SP3
By Table Size (pages) versus rows, steps 0.0000625
13Bookmark Lookup I/O Cost - 818
By Table Size (pages) versus rows, steps
0.00009765 625
14Bookmark Lookup I/O Cost SP3
Plan Cost by Table Size (pages) versus rows, SP3
and earlier
15Bookmark Lookup I/O Cost - 818
Plan Cost by Table Size (pages) versus rows,
build 818
16Bookmark Lookup IO Count
For a bookmark lookup for n rows to a table with
p pages 1st row 1 I/O required 2nd row 1 I/O
already done, 1-1/p chance additional I/O F(n,p)
F(n-1,p) 1 F(n-1,p)/p F(n-1,p)(1-1/p)
1 R 1-1/p F(n,p) 1 R R2 Rn-1
(1-Rn)/(1-R) p p (1-1/p)n
17Table Scan
SELECT xx FROM N1H WHERE ID _at_ID
I/O 0.03757850 0.00074074/page CPU 0.00007850
0.00000110/row
18Bookmark versus Scan
Table scan cost for 50,000 row, 506 pages Index
Seek and Bookmark Lookup cost for 1GB, SP3
19Aggregates
SELECT MIN(x) FROM M2C WHERE GroupID1
Aggregate MIN MAX Aggregate Compute
Scalar AVG SUM
I/O None CPU 0.0000001/row
For single row result
20Loop, Hash and Merge Joins
- SQL Server supports 3 types of joins
- Loop , Hash , Merge
- Hash join subtypes
- In memory, Grace, Recursive
- Different settings for SQL Batch RPC
- Merge join
- one-to-many
- many-to-many
21Loop Join
Outer Source (Top Input)
Inner Source (Bottom Input)
Join
22Loop Join Cost
Loop Join Cost Outer Source Cost Inner
Source Cost Join Cost
23Loop Join, cont
I/O Cost 0 CPU Cost 0.00000418 per row
24Loop Join, Inner Source
row count is expected matches per row for each
row from outer source (rounded down)
I/O and CPU cost is for 1 execute
Number of executes is row count from outer source
Cost is for all executes
25Loop Join IS Cost
Assumptions CPU Cost 0.0000796003 per row
applies for 11 join IO Cost Single row base
cost same as Index Seek Multiple rows estimate
of number pages required For small IS table (lt100
pages) Bounded by 0.0000785 per page For large
IS table (gt200 pages) Bounded by 0.0000785 per
page for up to 132 rows Approx 0.0063285 (1GB)
per row for 133 rows and above
26Loop Join IS I/O Costs (1)
Excluding base I/O cost 0.0063285
Inner Source I/O Cost by table size versus rows
27Loop Join IS I/O Costs (2)
Excluding base I/O cost 0.0063285
Inner Source I/O Cost by table size versus rows
28Loop Join Costs
Small Big IS Source table size
29Hash Join
SELECT FROM M2C m INNER HASH JOIN M2D n ON n.ID
m.ID WHERE m.GroupID _at_Group1 AND n.GroupID
_at_Group2
Hash Join Cost Outer Source Inner Source
Hash Match
30Hash Join Cost
Outer Source Inner Source are index seeks or
scans 1 execute, 1 or more rows
31Hash Join - IS
Hash join cost independent of IS column count or
size
32Hash Join - OS
Q1
Q2
Q3
Hash join cost dependent on OS size
33Hash Join Cost
Q2
Q1
Q3
34Hash Join Cost Formula
Base CPU Cost 0.017750000 base Fudge factors
0.0000001749 (2-30 rows) 0.0000000720 (100
rows) Cost per row 0.000015266 15 byte, 1st
100 (11 join) 0.000015091 gt1K
0.000015857 (parallel) 0.000001880 per
row per 4 bytes in OS 0.000009750 OS
0.000005516 / 0.000005341 IS I/O Cost
0.0000421000 per row over gt64-102MB?
0.0000036609 per row per 4 byte
Hash join spills to tempdb at 64-102MB in 32-bit
1-2GB memory 700MB in 64-bit with 32GB memory
35Merge Join
SELECT xx FROM M2C m INNER MERGE JOIN M2D n ON
n.ID m.ID WHERE m.GroupID _at_Group1 AND
n.GroupID _at_Group2
Merge Join Cost Outer Source Inner Source
Merge cost
36Merge Join Cost
Cost CPU 0.0056044 0.000004480/row Discrepan
cy 0.0000030 0.000002280/row IS
0.000002200/row OS
37Merge Sort
38Many-to-Many Merge
I/O 0.000313000 per row CPU 0.0056046
0.00004948 per row
39Loop, Hash Merge Join
40Loop, Hash Merge Join (2)
41Loop, Hash Merge Join (3)
421 to Many Joins
- Each row from OS joins to n rows in IS
Join Cost per additional IS row Loop 0.00004180
Hash 0.00000523-531 Merge 0.00000237 IS
Index Seek cost 0.0000011/row IO costs
43Sort Cost
I/O 0.011261261 CPU 0.000100079
0.00000305849(rows-1)1.26 weak dependency on
size per row
44Index Intersection
Table M2x, Index on GroupID Index on CodeID
SELECT xx FROM M2C WHERE GroupID _at_Group AND
CodeID _at_Code
SELECT xx FROM M2C a INNER JOIN M2C b ON b.ID
a.ID WHERE a.GroupID _at_Group AND b.CodeID
_at_Code
Merge Join cost formula different than previously
discussed
45Execution Plan Costs Recap
Index Seek I/O CPU Total 1GB 0.006328500
0.0000796 0.006408100 gt 1GB 0.003203425
0.0000796 0.003283025 Additional
page 0.00074074/p Additional rows 0.00000110/r
Bookmark Lookup I/O CPU Total 1GB 0.0062500
0.0000011 0.0062511 gt 1GB 0.0031249
0.0000011 0.0031260
Table Scan I/O CPU Total Base
0.0375785 0.0000785 Additional page
0.00074074/p Additional row 0.0000011/r
46Logical IO count
Example Index Depth 2, rows per page 100
I/O per additional row Bookmark Lookup
(Heap) 1 Bookmark Lookup (Clustered) 2 Loop
Join (IS) 2
Very little relation between IO count and plan
cost for different component operations IO count
comparisons more relevant for similar operations
I/O per addition 100 rows Index Seek 1 Hash
Merge join 2
47Accurate Performance Testing
- Execution Plan - match
- Raw size of DB not as important
- 1M customers actual, 10K test
- Cardinality more important
- 1 Customer 10 orders 10 order items per order
- Statistics actual data queried
- Statistics could be accurate but actual queries
favors different distribution
48Aggregates, multiple result rows
CPU Cost per result row 0.01777 0.0000188
CPU Cost 0.00000280 per source row 0.00000465
per result row
49Execution Plan Cost Summary
- Plan costs do not include RPC cost
- Plan costs are a model
- Index seek independent of index depth
- Bookmark L/U independent of table organization
- Logic by itself does not influence cost
- Costs are not influenced by lock hints
- Populate test DB with accurate cardinality
50Additional Information
www.sql-server-performance.com/joe_chang.asp SQL
Server Quantitative Performance Analysis Server
System Architecture Processor Performance Direct
Connect Gigabit Networking Parallel Execution
Plans Large Data Operations Transferring
Statistics SQL Server Backup Performance with
Imceda LiteSpeed jchang6_at_yahoo.com