数据库内核月报 - 2015 / 06-MySQL · TokuDB · TokuDB数据文件大小计算

简介:

想要查看TokuDB某个表占了多少磁盘空间,目前还没有太好的方法。
如果你使用’show table status’命令,得到的结果只会让你更迷茫:

           Name: toku
         Engine: TokuDB
        Version: 10
     Row_format: tokudb_zlib
           Rows: 28874059
 Avg_row_length: 30
    Data_length: 868159449
Max_data_length: 9223372036854775807
   Index_length: 2099497463
      Data_free: 0

我们来看看test_toku表磁盘文件大小:

$du -b _test_toku*
124427776       _test_toku_A_B.tokudb  --KEY(A,B)索引数据文件
215959552       _test_toku_B_C.tokudb  --KEY(B,C)索引数据文件
149504000       _test_toku_main.tokudb --主数据文件

Data_length和Index_length都对不上,而且差的还不是一点,真头疼,总不能每次都要去服务器上du吧?其实,我们可以通过information_schema.TokuDB_fractal_tree_info得到:

mysql> select * from TokuDB_fractal_tree_info where table_name='test_toku'\G;
*************************** 1. row ***************************
        dictionary_name: ./test/test_toku_A_B
     internal_file_name: _test_toku_A_B.tokudb
bt_num_blocks_allocated: 449
   bt_num_blocks_in_use: 449
      bt_size_allocated: 124416093
         bt_size_in_use: 123563101
           table_schema: test
             table_name: toku
  table_dictionary_name: key-test_toku_A_B
*************************** 2. row ***************************
        dictionary_name: ./test/test_toku_B_C
     internal_file_name: ./_test_toku_B_C.tokudb
bt_num_blocks_allocated: 612
   bt_num_blocks_in_use: 612
      bt_size_allocated: 215945353
         bt_size_in_use: 214784137
           table_schema: test
             table_name: toku
  table_dictionary_name: key-test_toku_B_C
*************************** 3. row ***************************
        dictionary_name: ./test/test_toku-main
     internal_file_name: ./_test_toku_main.tokudb
bt_num_blocks_allocated: 486
   bt_num_blocks_in_use: 486
      bt_size_allocated: 149491745
         bt_size_in_use: 148580897
           table_schema: test
             table_name: toku
  table_dictionary_name: main

bt_size_allocated字段是TokuDB内部维护当前数据文件最后分配的offset,跟数据文件磁盘大小基本一致。

再回到刚才的问题:show table status里Data_length和Index_length为什么跟实际大小出入这么大呢?

ha_tokudb::info()里:

stats.data_file_length = dict_stats.bt_dsize;

bt_dsize的值来自toku_ft_stat64:

bt_dsize = ft->in_memory_stats.numbytes;

in_memory_stats.numbytes是TokuDB在内存中维护的一个变量,用于记录变更数据的增量大小,每次checkpoint的时候持久化到数据文件(包括索引文件)的header里,所以是个出入比较大的参考变量(无压缩),已不能通过此变量来反应表文件的真实大小。

这么不爽的地方,我们(RDS MySQL)已准备好patch把它修掉,让show table status可以拿到TokuDB表文件的真实大小。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
3月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
165 3
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
808 152
|
3月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
3月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
3月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
3月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
3月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
172 1
|
3月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
432 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多