Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » 维护数据库 » SQL Anywhere 数据库问题疑难解答

 

了解数据库大小的意外更改

删除页面上的所有记录后,数据库页将被释放。数据库页被释放后,页面将变为可供重新使用,但不能从文件中删除。不过,以后的 INSERT 和 UPDATE 语句可使用释放的页面。

无论何时对数据库进行修改(例如,插入、更新或删除),都会向回退日志添加条目,该日志存储在系统 dbspace 内。如果许多这类操作在执行提交之前执行,则回退日志可能会变得非常大,并且可能增加数据库的大小。

检查点日志存储在系统 dbspace 的结尾。数据库服务器关闭时,检查点日志将被截断并且系统 dbspace 将缩小。通过 DELETE 或 TRUNCATE 操作释放的页面仍保留在数据库文件中以供将来使用,并且不能从文件中删除。

在数据库文件的大小增加,或者没有按预期减小的情况下:

  • 如果您使用 INSERT、UPDATE 或 DELETE 语句,将频繁执行 COMMIT。执行 COMMIT 时,分配给回退日志的页面将被释放以供在系统 dbspace 中重新使用。

  • 当您使用 UPDATE 或 DELETE 语句时,或者如果您使用 INSERT 语句并且涉及大型索引时,偶尔会执行 CHECKPOINT。每次点检查后,检查点日志中的页面将变为可供检查点日志再次使用。

  • 执行 TRUNCATE TABLE(可导致页面级删除)。在这类情况下,无需将页面的副本添加到检查点日志并且无需将各行级别操作添加到回退日志。通过 TRUNCATE TABLE 释放的页面仅在下一次点检查后重新可用。以下条件为真时,TRUNCATE TABLE 会导致页面级删除:

    • 没有到被截断表的外键,也没有来自该表的外键。
    • TRUNCATE TABLE 不在触发器内执行。
    • TRUNCATE TABLE 不会与原子操作一起执行。
    • 检查点日志页面将写入到系统 dbspace 文件的结尾。这些页面在数据库关闭时删除。

重建数据库可能会减小数据库的大小,因为重建的数据库空闲页较少。