统计TIKV磁盘容量

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.1
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【附件:截图/日志/监控】
SELECT
db_name,
table_name,
ROUND(SUM(CASE WHEN IS_INDEX = 1 THEN total_size / cnt ELSE 0 END),2) AS Approximate_Size_Index,
ROUND(SUM(CASE WHEN IS_INDEX = 0 THEN total_size / cnt ELSE 0 END),2) AS Approximate_Size_data,
ROUND(
SUM(CASE WHEN IS_INDEX = 1 THEN total_size / cnt ELSE 0 END) /
(SELECT ROUND(AVG(value), 2)
FROM METRICS_SCHEMA.store_size_amplification
WHERE value > 0),
2
) AS Disk_Size_Index,
ROUND(
SUM(CASE WHEN IS_INDEX = 0 THEN total_size / cnt ELSE 0 END) /
(SELECT ROUND(AVG(value), 2)
FROM METRICS_SCHEMA.store_size_amplification
WHERE value > 0),
2
) AS Disk_Size_data,
ROUND(SUM(total_size / cnt), 2) Approximate_Size,
ROUND(SUM(total_size / cnt / (SELECT
ROUND(AVG(value), 2)
FROM
METRICS_SCHEMA.store_size_amplification
WHERE
value > 0)),
2) Disk_Size
FROM
(SELECT
db_name,
table_name,
region_id,
IS_INDEX,
SUM(Approximate_Size) total_size,
COUNT(*) cnt
FROM
information_schema.TIKV_REGION_STATUS
GROUP BY db_name , table_name , region_id,IS_INDEX) tabinfo
GROUP BY db_name , table_name;
统计TIKV_REGION_STATUS表发现索引占用的磁盘容量比数据占用的磁盘多很多 这是为啥?

此方法只是预估,并不能准确判断占用大小

首先楼上说的对,这个是预估的容量,不是准确占用。

然后看具体情况吧,假如一个表3个字段,你排列组合可以建7条索引。
这种极端情况下,索引比表的数据多也不奇怪吧。
重点分析那个表的索引占比高。找出挑的来看看具体是什么情况。

1 个赞

你把你索引占表比例大的表结构贴出来看下

CREATE TABLE aaa (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘id’,
unique_key varchar(200) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
shop_id int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘’,
brand_id int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘’,
tid varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
oid varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
order_status tinyint(2) NOT NULL DEFAULT ‘0’ COMMENT ‘’,
step_trade_status tinyint(4) NOT NULL DEFAULT ‘0’ COMMENT ‘’,
is_live tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘’,
product_no varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
num_iid varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
skc_no varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
sku_sn varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
sku_id varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
pro_title varchar(255) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
order_sku_sn varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
pro_cid varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
pro_type tinyint(3) NOT NULL DEFAULT ‘0’ COMMENT ‘’,
virtual_sku_sn varchar(100) COLLATE utf8mb4_bin NOT NULL DEFAULT ‘’ COMMENT ‘’,
virtual_skc_no varchar(100) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
market_price decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
goods_price decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
transaction_price decimal(14, 2) NOT NULL DEFAULT ‘0.00’ COMMENT ‘’,
num int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘’,
order_sales_discount decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
expand_card_expand_price_used_suborder decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
expand_card_basic_price_used_suborder decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
adjust_fee decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
discount decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
total_fee decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
discount_part decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
discount_total decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
divide_order_fee decimal(20, 8) NOT NULL DEFAULT ‘0.00000000’ COMMENT ‘’,
post_fee decimal(20, 8) DEFAULT ‘0’ COMMENT ‘’,
created datetime NOT NULL COMMENT ‘’,
pay_time datetime DEFAULT NULL COMMENT ‘’,
shipping_time datetime DEFAULT NULL COMMENT ‘’,
add_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘’,
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘’,
receiver_city varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘’ COMMENT ‘’,
should_pay decimal(20, 8) DEFAULT ‘0’ COMMENT ‘’,
PRIMARY KEY (shop_id, oid)
/*T![clustered_index] CLUSTERED */,
UNIQUE KEY idx_unique (id),
KEY idx_tid (tid),
KEY idx_sku_id (sku_id),
KEY idx_sku_sn (sku_sn),
KEY idx_pay_time (pay_time),
KEY idx_created (created),
KEY idx_mix_1 (
shop_id,
num_iid,
sku_id,
sku_sn,
step_trade_status,
pay_time
),
KEY idx_mix_2 (
shop_id,
sku_sn,
pay_time,
step_trade_status
),
KEY idx_mix_3 (update_time, step_trade_status),
KEY idx_unique_key (unique_key)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci

这个表的索引比数据预估的容量还多

1 个赞

索引存的是索引的值加主键,你这索引确实太多了

1 个赞

我现在就是在tidb 的 grafana 中看

1 个赞

可以考虑调用pdserver接口获取,然后在程序处理下