【YashanDB知识库】YashanDB获取统计信息

简介: 【YashanDB知识库】YashanDB获取统计信息

在测试环境重现生产环境SQL语句执行计划问题时,需要使用生产环境相关表的统计信息模拟。

“变更产生风险”,更新统计信息之后,有些SQL语句的执行计划可能改变,可能变好,也可能变差,纠正SQL语句执行计划比较有效的手段之一是回退统计信息,这样需要保留一份统计信息的历史版本。

下面脚本可以从系统表中获取某表的相关统计信息,并生成更新统计信息的系统包调用,协助DBA完成上面工作。

ysgstats.sh

#!/bin/bash

#

# 生成更新统计信息的DBMS_STATS.SET_XXX_STATS调用语句,可用来保存表的统计信息版本

#

# 限制:owner及table name 被转换为大写,名字中包含小写字母不能生成相应语句

#  在YashanDB 23.2 版本适用,其它版本有可能不能正常工作

#



if [[ $# -lt 3 ]]; then

  echo Example: ${0} sys/yasdb_123@0.0.0.0:1688 owner tableName

  exit 1

fi



DBURL=${1}

owner=$(echo ${2}|tr 'a-z' 'A-Z')

tableName=$(echo ${3}|tr 'a-z' 'A-Z')



# 表统计信息

echo "-- Update statistics for table ${owner}.${tableName}"

yasql ${DBURL} -c "SELECT 'EXEC DBMS_STATS.SET_TABLE_STATS('''||owner||''','''||table_name||''','''||partition_name||''',' \

  ||num_rows||','||blocks||','||avg_row_len||');' FROM dba_tab_statistics WHERE owner='${owner}' AND table_name='${tableName}' AND partition_name IS NULL" \

  |grep ${owner}

echo ""



# 索引统计信息

yasql ${DBURL} -c "SELECT 'EXEC DBMS_STATS.SET_INDEX_STATS('''||owner||''','''||index_name||''','''||partition_name||''',' \

  ||num_rows||','||leaf_blocks||','||distinct_keys||','||distinct_fkeys||','||avg_leaf_blocks_per_key||','||avg_data_blocks_per_key \

  ||','||clustering_factor||','||blevel||');' \

  FROM dba_ind_statistics WHERE owner='${owner}' AND table_name='${tableName}' AND partition_name IS NULL" \

  |grep ${owner}

echo ""



# 列统计信息

yasql ${DBURL} -c "SELECT 'EXEC DBMS_STATS.SET_COLUMN_STATS('''||owner||''','''||table_name||''','''||column_name||''','||''''',' \

  ||num_distinct||','||density||','||num_nulls||','||avg_col_len||');' \

  FROM dba_tab_col_statistics WHERE owner='${owner}' AND table_name='${tableName}' " \

  |grep ${owner}

echo ""
AI 代码解读
目录
打赏
0
0
0
0
96
分享
相关文章
【YashanDB知识库】YashanDB安全设置示例
【YashanDB知识库】YashanDB安全设置示例
【YashanDB知识库】YashanDB安全设置示例
【YashanDB知识库】重装新库及元数据和数据导出导入指导
【YashanDB知识库】重装新库及元数据和数据导出导入指导
【YashanDB知识库】重装新库及元数据和数据导出导入指导
【YashanDB知识库】YCM数据库托管遇到的问题
【YashanDB知识库】YCM数据库托管遇到的问题
【YashanDB知识库】YCM数据库托管遇到的问题
【YashanDB知识库】备库扩缩容指导
【YashanDB知识库】备库扩缩容指导
【YashanDB知识库】YashanDB查询时间与实际时间默认少8小时
【YashanDB知识库】YashanDB查询时间与实际时间默认少8小时

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等