磁盘利用率低

SELECT * FROM oceanbase.__all_virtual_disk_stat;
为什么查询出的磁盘使用率比实际数据高很多呢

1 个赞

可以在对应异常的observer的日志目录执行下grep ‘mark and sweep’ observer.log*,看下是否是数据块多了,如果是的话是属于正常的

1 个赞

此外在并发度较高的时候,写入buffer的宏块个数容易大于文件写入并发,出现明显的写入放大情况。建议可以上传写信息导帖子里一起分析下,包括版本、原数据大小、现有数据大小、数据压缩情况等。

谢谢您的回复


磁盘使用率比实际数据的将近20倍

可以看下合并状态,有些情况下卡合并和会出现磁盘使用量明显大于数据量的情况
相关操作:可以参考https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000034003

此外根据问题描述可能这个标题改为磁盘利用率低可能更合适。版本型号、所使用的环境麻烦也补充下

版本4.0,现有数据10g左右,磁盘使用率200g。

合并状态是否正常?

正常

可能是临时文件的写入放大,可以用这个语句统计临时文件宏块利用率,文件名需要自行改下
grep ‘ob_tmp_file*’ observer.log.2023031022* | grep ‘succeed to wash a block’ | grep -o ‘free_page_nums:[0-9]*’ | awk -F ‘:’ ‘{ sum += $2; } END { print "total_page_num = " sum; print "avg_free_page_nums = " sum/NR; print "macro_block_count = " NR }’

image

需要换成有值的log名,observer.log可能还没有刷对应的日志

另外可以看下CDB_OB_TABLET_REPLICA 表中required size和data size的比值

或者可能得分析下数据的情况,方便的话看下能否提供下对应的数据

数据有什么问题呢,数据一共就10g左右,实际显示占用了200g

__all_virtual_disk_stat查的数据和原数据量大小的截图麻烦上传下

CDB_OB_TABLET_REPLICA 表中required size和data size的比值
可以计算出磁盘空洞率

查一下下面 SQL:

WITH table_locs AS (
SELECT
	t.tenant_id,
	t.database_name,
	t.table_id,
	t.table_name,
	t.table_type tablet_type,
	t.tablet_id,
	REPLACE(concat(t.table_name,':',t.partition_name,':',t.subpartition_name),':NULL','') tablet_name,
	t.tablegroup_name,
	t.ls_id,
	t.ZONE, 
	t.ROLE,
	t.svr_ip
FROM
	oceanbase.CDB_OB_TABLE_LOCATIONS t
WHERE
	t.data_table_id IS NULL 
UNION
SELECT
	i.tenant_id,
	i.database_name,
	i.table_id,
	t.table_name,
	i.table_type tablet_type,
	i.tablet_id,
	REPLACE(
		REPLACE(concat(i.table_name,':',i.partition_name,':',i.subpartition_name) ,concat('__idx_', i.data_table_id, '_'),'')
		,':NULL',''
	) tablet_name,
	i.tablegroup_name,
	i.ls_id,
	i.ZONE, 
	i.ROLE,
	i.svr_ip
FROM
	oceanbase.CDB_OB_TABLE_LOCATIONS i
INNER JOIN oceanbase.__all_virtual_table t ON
	( i.tenant_id = t.tenant_id
		AND i.data_table_id = t.table_id  )
WHERE i.data_table_id IS NOT NULL 
)
SELECT t.tenant_id,
	t.svr_ip,
	t.database_name,
	round(sum(s.size)/1024/1024/1024,2) size_gb
FROM
	table_locs t JOIN oceanbase.GV$OB_SSTABLES s 
		ON (t.tenant_id=s.tenant_id AND t.ls_id=s.ls_id AND t.svr_ip=s.svr_ip AND t.tablet_id=s.tablet_id)
WHERE 1=1
--	AND t.tenant_id = 1004
--	AND t.database_name IN ('tpccdb')
--	AND t.table_name IN ('bmsql_stock2')
--	AND s.table_type NOT IN ('MEMTABLE')
-- AND t.ROLE IN ('LEADER')
GROUP BY
	t.tenant_id,
	t.svr_ip,
	t.database_name
ORDER BY 
	t.tenant_id,
	t.svr_ip,
	t.database_name;
1 个赞