oracle数据库批量删除(delete)数据后,表空间不是立刻释放问题解决
·
oracle数据库批量删除(delete)数据后,表空间不是立刻释放问题解决
解决办法
当我们在手动清理(delete)一张表里面的废数据时,数据库并不会立刻废数据的表空间,这样在我们系统的查询时会有性能影响。
我们可以通过手动触发表分析的方式,释放被删除的废数据所占用的表空间,提示性能。
触发方法如下:
begin
dbms_stats.gather_table_stats('schema','table_name')
end;
注意:替换sql中的表用户与表名
问题原因分析
oracle会维护数据库中所有表的一些信息:
-
行数(Num Rows)
-
表块数(Blocks)
-
行长(Avg Row Len)
-
列的信息:不同值的数量(NDV)、空值数量、数据分布(直方图)
-
索引的信息:聚类因子、索引层级、叶块数量
当我们手动删除完一批数据后,oracle没有准确的统计信息,执行查询sql时,优化器就像在“盲猜”,很可能选择全表扫描而不是索引扫描,或者使用低效的表连接方式,导致 SQL 性能极差。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)