如何测量 Firebird 2.1 数据库上 blob 占用的空间量?

2024-04-22

我有一个使用 Firebird 2.1 的生产数据库,我需要找出每个表(包括 blob)使用了多少空间。 blob 部分是棘手的部分,因为标准统计报告未涵盖它。

我无法轻松访问服务器桌面,因此安装 UDF 等并不是一个好的解决方案。

我怎样才能轻松做到这一点?


您可以使用以下语句计算数据库中所有 BLOB 字段的总大小:

EXECUTE BLOCK RETURNS (BLOB_SIZE BIGINT)
AS
  DECLARE VARIABLE RN CHAR(31) CHARACTER SET UNICODE_FSS;
  DECLARE VARIABLE FN CHAR(31) CHARACTER SET UNICODE_FSS;
  DECLARE VARIABLE S BIGINT;
BEGIN
  BLOB_SIZE = 0;
  FOR
    SELECT r.rdb$relation_name, r.rdb$field_name 
      FROM rdb$relation_fields r JOIN rdb$fields f 
        ON r.rdb$field_source = f.rdb$field_name
    WHERE f.rdb$field_type = 261
    INTO :RN, :FN
  DO BEGIN
    EXECUTE STATEMENT
      'SELECT SUM(OCTET_LENGTH(' || :FN || ')) FROM ' || :RN ||
      ' WHERE NOT ' || :FN || ' IS NULL'
    INTO :S;
    BLOB_SIZE = :BLOB_SIZE + COALESCE(:S, 0);
  END
  SUSPEND;
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测量 Firebird 2.1 数据库上 blob 占用的空间量? 的相关文章

随机推荐