注册

根据数据页,填充因子,表对象行长度,计算每页大约存放行数

sanynkc 2026/10/08 336 10

根据数据页,填充因子,表对象行长度,计算每页大约存放行数
需要进一步验证
重新贴出sql语句,仅供参考,感觉和实际存储空间还有一定差值。
SELECT
'WITH page_info AS (' || CHR(10) ||
' SELECT TO_NUMBER(PARA_VALUE) AS page_size' || CHR(10) ||
' FROM v$dm_ini' || CHR(10) ||
' WHERE PARA_NAME = ''GLOBAL_PAGE_SIZE''' || CHR(10) ||
'),' || CHR(10) ||
'fillfactor_info AS (' || CHR(10) ||
' SELECT' || CHR(10) ||
' CASE TO_NUMBER(PARA_VALUE)' || CHR(10) ||
' WHEN 0 THEN 1' || CHR(10) ||
' ELSE TO_NUMBER(PARA_VALUE) / 100' || CHR(10) ||
' END AS fillfactor_ratio,' || CHR(10) ||
' CASE TO_NUMBER(PARA_VALUE)' || CHR(10) ||
' WHEN 0 THEN 100' || CHR(10) ||
' ELSE TO_NUMBER(PARA_VALUE)' || CHR(10) ||
' END AS fillfactor_pct' || CHR(10) ||
' FROM v$dm_ini' || CHR(10) ||
' WHERE PARA_NAME = ''DEFAULT_FILLFACTOR''' || CHR(10) ||
'),' || CHR(10) ||
'row_stats AS (' || CHR(10) ||
' SELECT' || CHR(10) ||
' COUNT() AS total_rows,' || CHR(10) ||
' (' || bb.v_sql2 || ' 0.00)' || CHR(10) ||
' / COUNT(
) AS avg_row_bytes' || CHR(10) ||
' FROM ' || bb.schemaname || '.' || bb.tablename || CHR(10) ||
')' || CHR(10) ||
'SELECT' || CHR(10) ||
' pi.page_size / 1024 AS page_size_kb,' || CHR(10) ||
' ROUND(rs.avg_row_bytes, 2) AS avg_row_bytes,' || CHR(10) ||
' fi.fillfactor_pct AS fillfactor_pct,' || CHR(10) ||
' ROUND((pi.page_size - 72) * fi.fillfactor_ratio, 2) AS usable_space,' || CHR(10) ||
' ROUND(rs.avg_row_bytes + 24, 2) AS row_total_overhead,' || CHR(10) ||
' FLOOR((pi.page_size - 72) * fi.fillfactor_ratio' || CHR(10) ||
' / (rs.avg_row_bytes + 24)) AS rows_per_page,' || CHR(10) ||
' rs.total_rows,' || CHR(10) ||
' ROUND(rs.total_rows * rs.avg_row_bytes / 1024 / 1024, 2) AS total_data_mb' || CHR(10) ||
'FROM page_info pi, fillfactor_info fi, row_stats rs;' AS generated_sql
FROM (
SELECT
aa.schemaname,
aa.tablename,
LISTAGG(aa.v_sql, '') WITHIN GROUP (ORDER BY aa.colname) AS v_sql2
FROM (
SELECT
c.name AS schemaname,
a.name AS colname,
b.name AS tablename,
'NVL(SUM(LENGTHB(' || a.name || ')), 0) + ' AS v_sql
FROM SYSCOLUMNS a
INNER JOIN SYSOBJECTS b ON a.id = b.id
AND b.subtype$ = 'UTAB'
AND b.name IN ('UPMS_PROCESS_FORM') -- ← 替换为目标表名
INNER JOIN SYSOBJECTS c ON b.schid = c.id
AND c.name = 'YCQ' -- ← 替换为目标模式名
AND c.type$ = 'SCH'
) aa
GROUP BY aa.schemaname, aa.tablename
) bb;
备注:
page_size_kb 数据页大小 = 32 KB(32768 字节),达梦最大值
avg_row_bytes 单行平均数据字节数(不含行头开销)
fillfactor_pct 填充因子 = 100%,即页空间全部可用,不预留更新空间
usable_space 每页扣除固定开销后可实际用于存数据的字节数
row_total_overhead 每行在页上的总占用(数据 + 行头 + 行目录)
rows_per_page 每个数据页平均可存储的行数
total_rows 表的总行数
total_data_mb 表中字段的总数据体积(MB)

回答 0
暂无回答
扫一扫
联系客服