Performance 标识在架构列表中具有过时统计信息的分区
我有5个开发模式。他们每个人都有分区表。我们还有脚本来动态创建分区表(每月/每年)。我们每次都要去DBA收集分区表的详细信息。我们真正的问题是我们有一个9个分区的分区表。每天在增量加载操作(使用Performance 标识在架构列表中具有过时统计信息的分区,performance,oracle,oracle11g,partitioning,Performance,Oracle,Oracle11g,Partitioning,我有5个开发模式。他们每个人都有分区表。我们还有脚本来动态创建分区表(每月/每年)。我们每次都要去DBA收集分区表的详细信息。我们真正的问题是我们有一个9个分区的分区表。每天在增量加载操作(使用PL/SQL更新/删除)之后,也会使用SQL*加载程序加载一些APPEND。当数据库的负载达到峰值时,会发生此操作。此表中确实存在一些性能问题。(SELECTquerys) 当向DBA报告时,他们会说表统计数据过时,在他们“收集统计数据”之后,神奇地查询工作更快。我对此进行了搜索,并确定了一些有关动态性能
PL/SQL
更新/删除)之后,也会使用SQL*加载程序加载一些APPEND
。当数据库的负载达到峰值时,会发生此操作。此表中确实存在一些性能问题。(SELECT
querys)
当向DBA报告时,他们会说表统计数据过时,在他们“收集统计数据”之后,神奇地查询工作更快。我对此进行了搜索,并确定了一些有关动态性能
视图的信息
现在,我有以下问题
1) 开发人员是否可以生成一个包含所有分区表、分区名称、可用记录数的列表,而无需访问DBA
2) 我们要确定每个分区的最后分析日期吗
3) 以及分区(索引)的状态(如果可用或不可用)
是的,您可以通过使用ALL\u PART\u tables
或USER\u PART\u tables
(如果您有访问权限),生成分区表列表和您想要查看的大量相关数据。
ALL_TAB_PARTITIONS
可用于获取每个分区的行数以及其他详细信息
检查Oracle的其他视图以收集分区表的详细信息
我建议您在数据加载后每天分析表,并可能重建索引。如果数据负载正在影响表中的许多记录,并且将影响现有索引,那么最好主动更新表和索引的统计信息
您可以在系统视图上使用以获取此信息(检查)
是的,您可以通过使用ALL\u PART\u tables
或USER\u PART\u tables
(如果您有访问权限),生成分区表列表和您想要查看的大量相关数据。
ALL_TAB_PARTITIONS
可用于获取每个分区的行数以及其他详细信息
检查Oracle的其他视图以收集分区表的详细信息
我建议您在数据加载后每天分析表,并可能重建索引。如果数据负载正在影响表中的许多记录,并且将影响现有索引,那么最好主动更新表和索引的统计信息
您可以在系统视图上使用以获取此信息(检查)
我曾经查询过下面提到的所有表
您提到的统计信息和直方图详细信息将由Oracle自动更新。但是当数据库忙于许多负载时,我看到这些操作需要手动触发。我们面临着类似的情况,所以在加载关键表之后,我们通常会强制执行分析操作。您需要对用于加载表的id具有权限
ANALYZE TABLE table_name PARTITION (partition_name) COMPUTE STATISTICS;
编辑:分析
不再收集所述的CBO
统计数据
因此,必须使用DBMS\u STATS
包
DBMS_STATS.GATHER_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT to_estimate_percent_type
(get_param('ESTIMATE_PERCENT')),
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'),
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')),
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (
get_param('NO_INVALIDATE')),
force BOOLEAN DEFAULT FALSE);
在分析完成之前,下面的视图表可能无法生成准确的结果(尤其是最后分析的行和num列)
注意:尝试将表名中的all
替换为dba
,如果您有访问权限,可以尝试
您还可以尝试为您使用的开发id获取SELECT\u CATALOG\u ROLE
,这样您就可以选择数据字典视图
,这减少了对此类查询的依赖性(DBA仍然是解决少数问题的合适人选!!)
查询以标识分区表、分区名称、行数和上次分析的日期
select
all_part.owner as schema_name,
all_part.table_name,
NVL(all_tab.partition_name,'N/A'),
all_tab.num_rows,
all_tab.last_analyzed
from
all_part_tables all_part,
all_tab_partitions all_tab
where all_part.table_name = all_tab.table_name and
all_tab.partition_name = all_tab.partition_name and
all_part.owner=all_tab.table_owner and
all_part.owner in ('SCHEMA1','SCHEMA2','SCHEMA3')
order by all_part.table_name,all_tab.partition_name;
下面的查询返回不可用的索引/表名
SELECT INDEX_NAME,
TABLE_NAME,
STATUS
FROM ALL_INDEXES
WHERE status NOT IN ('VALID','N/A');
SELECT INDEX_NAME,
PARTITION_NAME,
STATUS ,
GLOBAL_STATS
FROM ALL_IND_PARTITIONS
WHERE status != 'USABLE';
下面的查询返回不可用的索引/表(分区
)名称
SELECT INDEX_NAME,
TABLE_NAME,
STATUS
FROM ALL_INDEXES
WHERE status NOT IN ('VALID','N/A');
SELECT INDEX_NAME,
PARTITION_NAME,
STATUS ,
GLOBAL_STATS
FROM ALL_IND_PARTITIONS
WHERE status != 'USABLE';
我曾经查询过下面提到的所有表
您提到的统计信息和直方图详细信息将由Oracle自动更新。但是当数据库忙于许多负载时,我看到这些操作需要手动触发。我们面临着类似的情况,所以在加载关键表之后,我们通常会强制执行分析操作。您需要对用于加载表的id具有权限
ANALYZE TABLE table_name PARTITION (partition_name) COMPUTE STATISTICS;
编辑:分析
不再收集所述的CBO
统计数据
因此,必须使用DBMS\u STATS
包
DBMS_STATS.GATHER_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT to_estimate_percent_type
(get_param('ESTIMATE_PERCENT')),
block_sample BOOLEAN DEFAULT FALSE,
method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'),
degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')),
granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')),
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (
get_param('NO_INVALIDATE')),
force BOOLEAN DEFAULT FALSE);
在分析完成之前,下面的视图表可能无法生成准确的结果(尤其是最后分析的行和num列)
注意:尝试将表名中的all
替换为dba
,如果您有访问权限,可以尝试
您还可以尝试为您使用的开发id获取SELECT\u CATALOG\u ROLE
,这样您就可以选择数据字典视图
,这减少了对此类查询的依赖性(DBA仍然是解决少数问题的合适人选!!)
查询以标识分区表、分区名称、行数和上次分析的日期
select
all_part.owner as schema_name,
all_part.table_name,
NVL(all_tab.partition_name,'N/A'),
all_tab.num_rows,
all_tab.last_analyzed
from
all_part_tables all_part,
all_tab_partitions all_tab
where all_part.table_name = all_tab.table_name and
all_tab.partition_name = all_tab.partition_name and
all_part.owner=all_tab.table_owner and
all_part.owner in ('SCHEMA1','SCHEMA2','SCHEMA3')
order by all_part.table_name,all_tab.partition_name;
下面的查询返回不可用的索引/表名
SELECT INDEX_NAME,
TABLE_NAME,
STATUS
FROM ALL_INDEXES
WHERE status NOT IN ('VALID','N/A');
SELECT INDEX_NAME,
PARTITION_NAME,
STATUS ,
GLOBAL_STATS
FROM ALL_IND_PARTITIONS
WHERE status != 'USABLE';
下面的查询返回不可用的索引/表(分区
)名称
SELECT INDEX_NAME,
TABLE_NAME,
STATUS
FROM ALL_INDEXES
WHERE status NOT IN ('VALID','N/A');
SELECT INDEX_NAME,
PARTITION_NAME,
STATUS ,
GLOBAL_STATS
FROM ALL_IND_PARTITIONS
WHERE status != 'USABLE';
通常不需要识别需要收集统计信息的对象。Oracle会自动收集过时对象的统计信息,除非任务已完成
手动禁用。这对于OLTP系统来说通常已经足够好了。使用t