Oracle记录不再自动统计(oracle 不自动统计)
Oracle记录不再自动统计
近日,Oracle官方宣布将于下一个主要版本中取消自动收集统计数据功能。这意味着,DBA(数据库管理员)需要手动进行数据库统计数据的收集和管理,以保证数据库的性能和稳定性。
在以往的版本中,Oracle数据库默认会自动收集统计数据。这些统计数据包括表、索引和分区等的大小、行数、行密度等信息。这些统计数据对于优化查询计划和提高数据库性能非常重要。但是,在一些高使用率的数据库上,频繁的统计数据的自动收集会导致性能问题。
因此,Oracle决定尝试取消自动收集统计数据功能,并在下一个主要版本中提供手动收集统计数据的方法。
在进行手动收集统计数据之前,DBA需要了解以下内容:
1. 如何确定哪些对象需要收集统计数据
DBA可以通过以下SQL语句获取哪些表需要进行统计数据的收集:
SELECT OWNER, TABLE_NAME, LAST_ANALYZED
FROM DBA_TABLES
WHERE OWNER NOT IN (‘SYS’,’SYSTEM’) AND
(LAST_ANALYZED IS NULL OR LAST_ANALYZED
该语句将返回数据字典中没有被分析过或者分析时间超过30天的表名、拥有者以及最后一次统计数据的时间。
2. 如何进行手动收集统计数据
DBA可以使用以下SQL命令手动收集统计数据:
EXEC DBMS_STATS.GATHER_TABLE_STATS( ‘USER’, ‘TABLE_NAME’);
其中‘USER’为表拥有者,‘TABLE_NAME’为表名,该命令将收集该表的统计数据并在数据字典中记录。
3. 如何调度统计数据的收集
在手动收集统计数据之后,DBA可以使用以下命令为表定期收集统计数据:
EXEC DBMS_STATS.SET_TABLE_PREFS(‘USER’, ‘TABLE_NAME’, ‘METHOD_OPT’,
‘FOR ALL COLUMNS SIZE AUTO’);
其中‘USER’为表拥有者,‘TABLE_NAME’为表名,‘METHOD_OPT’为统计方法,‘FOR ALL COLUMNS SIZE AUTO’用于自动选择最佳大小的数据样本收集。
Oracle取消自动收集统计数据功能的做法在现有的数据库管理员中引起了一些争议。因为一些DBA认为手动收集统计数据会增加他们的工作量,但是其他DBA对于手动收集统计数据持乐观态度,认为它可以帮助DBA更好的管理和优化数据库性能。无论如何,Oracle取消自动收集统计数据功能的做法是一个引人注目和积极的尝试。