我们删除了表行以提高性能,因为我们有一个非常大的数据库。数据库大小减少到50%,但删除后存储过程变得更慢。它曾经在3分钟内运行,现在需要3个小时。没有对程序进行任何更改。
我们在旧数据库中再次运行相同的程序(在删除之前),它运行正常。数据库大小减小后,所有其他过程运行得更快。可能是什么问题呢?
答案 0 :(得分:1)
删除数据库中的行并不能真正释放它自己的空间。
在运行可重新组织存储在表中的数据的命令之前,通常不会释放空间。在SAP ASE中,可以使用数据库上的reorg
,reclaim space
和rebuild
等选项运行命令forwarded rows
。从逻辑上讲,它很像对硬盘进行碎片整理,数据被重新组织以减少物理空间的使用。
在SQL Anywhere中,命令为REORGANIZE TABLE
,或者可以在Sybase Central的 Fragmentation 选项卡中找到。这对index fragmentation也有帮助。
在对数据库进行大量更改之后经常需要做的另一件事是更新表或索引统计信息。查询优化器根据存储在系统表中的表统计信息构建查询计划。当大型事务或大量小事务发生时,统计信息可能导致优化器做出不太理想的选择。
在SQL Anywhere中,可以使用Sybase Central完成此操作。
您可能还想查看SQL Anywhere文档的Monitoring and improving database performance部分。它涵盖了这些程序等等。