SYBASE ASE中的统计信息
来源:互联网 发布:易观大数据产品家族 编辑:程序博客网 时间:2024/06/05 04:34
在SYBASE ASE中,SQL语句执行的时间主要取决于查询执行器对数据的访问路径和处理方式,也就是执行计划,而最优的执行计划由查询优化器负责获取。SYBASE ASE的查询优化器是基于成本的,对于每一个获得的执行计划,优化器都会进行成本的计算,最终将成本最低的执行计划标识为最优。优化器通过一定的算法和公式来衡量执行计划的成本,而在算法和公式中使用的数据就是数据库的统计信息。统计信息存储在两个系统表中,一个是systabstats表,用于存储表/索引级的统计信息,另一个是sysstatistics表,用于存储列级的统计信息。
如何阅读表的统计信息
SYBASE提供了操作系统级的命令optdiag用于输出统计信息,其常见使用方式如下:
optdiag statistics db_name[.owner[.[tab_name[.col_name] ] ] ]
-U user_name
-P password
-S server
-o output_file
eg:
optdiag statistics zxvnms.dbo.device -Usa -P -S205 -o D:/device.log
输出的统计信息位于output_file中
统计信息类型
1. 表/索引级的统计信息
以下为某个ALLPAGES类型的表的统计信息的输出中表和索引级的统计信息,由于聚簇索引的页级就是表的数据,因此对于ALLPAGES类型的表,聚簇索引的统计信息也就是表的统计信息,而非聚簇索引则有单独的统计信息。如果是DOL类型的表,由于其聚簇索引的结构类似于其非聚簇索引,因此聚簇索引和非聚簇索引都有单独的统计信息。
Statistics for index: "tbl_Result_18476745991" (clustered)
Index column list: "StartTime", "StartTimeDstOffset", "ObjectNo"
Data page count: 438440
---数据页的数目,用于估计表扫描的成本
Empty data page count: 0
---空数据页的树木,如果太多,会导致大块IO的效率下降
Data row count: 7534351.0000000000000000
---数据行数目,优化器用其设定每页的平均行数
Forwarded row count: 0.0000000000000000
---前移行数目,仅用于DOL表,优化器为每一个前移行计算两个IO
Deleted row count: 0.0000000000000000
---删除行数目,仅用于DOL表,如果太多,意味着页上数据填充率比较低
Data page CR count: 375587.0000000000000000
---用于计算Data page cluster ratio
OAM + allocation page count: 52506
---OAM页和分配但也首页的数目
First extent leaf pages: 0
Data row size: 294.5465171263140292
Index height: 3
Parallel join degree: 0.0000000000000000
Unused page count: 9192
OAM page count: 52
Derived statistics:
Data page cluster ratio: 0.1638354164765989
---数据页聚簇率,太低意味着在数据在不同extent上的分布比较分散,会导致大块
IO的效率下降
Space utilization: 0.6202966169989167
Large I/O efficiency: 0.1459182559566758
Statistics for index: "StartTimeIndex" (nonclustered)
Index column list: "StartTime", "ObjectNo", "StartTimeDstOffset"
Leaf count: 24911
---索引页级的数据页数目
Empty leaf page count: 0
Data page CR count: 820046.0000000000000000
Index page CR count: 13291.0000000000000000
Data row CR count: 879449.0000000000000000
First extent leaf pages: 0
Leaf row size: 21.0000000000000000
Index height: 2
Derived statistics:
Data page cluster ratio: 0.0720347204369401
Index page cluster ratio: 0.5331008854429509
Data row cluster ratio: 0.9378502633418034
Space utilization: 0.7783659386238538
Large I/O efficiency: 0.2342856528655574
2. 列级统计信息
Statistics for column: "StartTime"
Last update of column statistics: Apr 10 2007 9:43:36:100PM
Range cell density: 0.0003456469583822
---描述列中副本值的平均数,密度越接近1,不同的值越多,越接近0,值越单一
Total density: 0.0003456469583822
---整个列中重复值的平均数,优化器他把用做评估一次连接中表扫描有多少返回行
Range selectivity: default used (0.33)
In between selectivity: default used (0.25)
---选择性,优化器在无法知道SARG值时,适用默认的选择性,对于等式使用10%,开区间条件,使用33%,闭区间使用25%
Unique range values: 0.0003287310979619
Unique total values: 0.0003287310979619
Average column width: default used (8.00)
Histogram for column: "StartTime"
---直方图
Column datatype: datetime
Requested step count: 20
---步骤数
Actual step count: 20
Sampling Percent: 0
Step Weight Value
1 0.00000000 <= "Mar 10 2007 2:44:59:996AM"
2 0.05280559 <= "Mar 12 2007 1:45:00:000AM"
3 0.05153025 <= "Mar 13 2007 10:45:00:000PM"
4 0.05326261 <= "Mar 15 2007 7:45:00:000PM"
5 0.05243758 <= "Mar 17 2007 2:30:00:000PM"
6 0.05464172 <= "Mar 19 2007 10:45:00:000AM"
7 0.05039562 <= "Mar 21 2007 2:45:00:000AM"
8 0.05414711 <= "Mar 22 2007 8:45:00:000PM"
9 0.04996035 <= "Mar 24 2007 11:00:00:000AM"
10 0.05312137 <= "Mar 26 2007 4:00:00:000AM"
11 0.05150971 <= "Mar 27 2007 6:00:00:000PM"
12 0.05440811 <= "Mar 29 2007 9:15:00:000AM"
13 0.05107565 <= "Mar 30 2007 8:15:00:000PM"
14 0.05475893 <= "Apr 1 2007 9:00:00:000AM"
15 0.05237434 <= "Apr 2 2007 8:00:00:000PM"
16 0.05490058 <= "Apr 4 2007 6:30:00:000AM"
17 0.05202205 <= "Apr 5 2007 10:30:00:000AM"
18 0.05357409 <= "Apr 7 2007 9:15:00:000PM"
19 0.05094394 <= "Apr 9 2007 5:00:00:000AM"
20 0.05213039 <= "Apr 10 2007 9:15:00:000PM"
直方图描述了在各个范围中值的比例
update statistics的使用
优化器使用统计信息时,首先把统计信息读入内存中,在表的数据发生改变时,其内存中的统计信息也随之发生改变,但只有在正常关闭数据库,运行sp_flushstats,执行optdiag以及执行update statistic等情况下统计信息才会被立即写入磁盘,在数据库运行过程中,housekeeper进程会在空闲时将统计信息写入磁盘。在数据库长期运行后,由于统计信息更新的滞后,会导致统计信息出现误差,这时候不准确的统计信息会导致优化器选择错误的执行计划,所以在数据库运行一段时间以后需要更新统计信息。更新的命令有:
update statistics table_name [index_name]
---更新表以及和特定索引的统计信息
update statistics table_name [col_name]
---更新特定列的统计信息
update index statistics table_name [index_name]
---更新索引以及索引头列以及头列组合的统计信息
update all statistics table_name
---更新表中所有列的统计信息
需要注意的是,更新统计信息需要扫描全表或是所有索引,因此对于数据量很大的表会使用很长时间,这期间数据库会对表加锁,有可能阻塞表的插入更新和删除操作。
对于一般的查询使用update index statistics table_name 就足够了,如果对于某些特殊的查询,可以考虑对于使用到的列进行列统计信息的单独更新,这样可以节约更新统计信息的时间。
- SYBASE ASE中的统计信息
- 理解Sybase ASE数据库中的索引
- 理解Sybase ASE数据库中的索引
- 恢复Sybase ASE 15.0.x中的master数据库
- Sybase ASE DBCC
- 学习sybase ase 12.5
- Sybase ASE 安装指南
- Sybase ASE的字符集
- Sybase ASE的字符集
- Sybase ASE的字符集
- Sybase ASE 临时表
- sybase ase 重启
- 解决Sybase ASE中的dbisql (interactive sql)和Sybase SQL Anywhere中的dbisql相互打架问题
- Sybase ASE中用isql连接数据库失败时的错误信息所反馈的信息
- Sybase ASA 和 Sybase ASE 区别
- Sybase ase 数据库日常维护
- Sybase ASE的版本演变
- Sybase ASE各系统数据库
- min宏定义探究
- effective C++ 条款01 to 条款04
- gluPerspective参数问题
- 横空出世,席卷互联网--评微软等公司数据结构+算法面试100题
- 专题图服务安装注意事项
- SYBASE ASE中的统计信息
- jquery 排序
- 新闻图片切换代码(纯js,no flash)
- JDBC 连接SQL 2005
- TJA1050--扩展了高速CAN收发器的阵容
- Atutor资源整理
- js仿baidu google 实用的文本框内容自动完成效果
- How to debug Windows services
- OLE技术专题——COM的连接点事件(上)(转)