午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

實例講解MySQL統(tǒng)計庫表大小

瀏覽:133日期:2023-10-14 10:48:28

統(tǒng)計每個庫每個表的大小是數(shù)據(jù)治理的其中最簡單的一個要求,本文將從抽樣統(tǒng)計結(jié)果及精確統(tǒng)計結(jié)果兩方面來統(tǒng)計MySQL的每個庫每個表的數(shù)據(jù)量情況。

1、統(tǒng)計預(yù)估數(shù)據(jù)量

mysql數(shù)據(jù)字典庫information_schema里記錄了統(tǒng)計的預(yù)估數(shù)據(jù)量(innodb引擎表不準(zhǔn)確,MyISAM引擎表準(zhǔn)確)及數(shù)據(jù)大小、索引大小及表碎片的大小等信息。

如果想了解每個庫及表的大概數(shù)據(jù)量級,可以直接查information_schema.tables進行統(tǒng)計即可。例如:

SELECT table_schema,table_name,table_rows,data_length+index_length+ data_free data_size FROM information_schema.`TABLES` WHERE table_schema IN (’db1’,’db2’);

其中data_size單位為B

實例講解MySQL統(tǒng)計庫表大小

如上文所述,統(tǒng)計信息里的數(shù)據(jù)條數(shù)及size是根據(jù)部分?jǐn)?shù)據(jù)抽樣統(tǒng)計的值,與實際大小存在差異,且表越大,差異越明顯,如果想知道每張表的實際情況,需用后續(xù)的方法。

2、統(tǒng)計實際數(shù)據(jù)量

想要統(tǒng)計每張表的實際大小就得去遍歷每個表算出對的記錄數(shù),通過查看表空間大?。總€表獨立表空間)查看每個表的size。通過以下步驟即可達到精確統(tǒng)計的目的。

創(chuàng)建路徑

創(chuàng)建一個工作路徑,保存腳本及臨時文件等

mkdir -p /usr/local/data_size

創(chuàng)建統(tǒng)計庫及表

在需要統(tǒng)計的數(shù)據(jù)庫實例上創(chuàng)建統(tǒng)計庫

SQL> create database bak_db;

創(chuàng)建統(tǒng)計的存儲過程

SQL> use bak_db;SQL>CREATE PROCEDURE `p_db_size`()BEGINDECLARE v_id INT;DECLARE v_maxid INT;DECLARE v_tbname VARCHAR(50);DECLARE v_dbname VARCHAR(50);DECLARE v_sql_upd VARCHAR(200);SET v_id =(SELECT MIN(id) FROM bak_db.tb_size);SET v_maxid =(SELECT MAX(id) FROM bak_db.tb_size);WHILE v_id <=v_maxidDOSET v_tbname = (SELECT tbname FROM bak_db.tb_size WHERE id=v_id);SET v_dbname = (SELECT dbname FROM bak_db.tb_size WHERE id=v_id);SET v_sql_upd = CONCAT(’update bak_db.tb_size set tb_rows=(select count(*) from ’,v_dbname,'.',v_tbname,') where id=',v_id); SET @v_sql_upd := v_sql_upd; PREPARE stmt FROM @v_sql_upd; EXECUTE stmt ; DEALLOCATE PREPARE stmt; SET v_id = v_id +1;END WHILE; END;

創(chuàng)建腳本

vim data.sh/* 插入如下內(nèi)容*/#! /bin/bashcd /usr/local/data_sizedu -s /data/mysql/mysql3306/data/db1/* |grep -v '.frm' |grep -v '.opt' >/usr/local/data_size/data_size du -s /data/mysql/mysql3306/data/db2/* |grep -v '.frm' |grep -v '.opt'>>/usr/local/data_size/data_size# 后面4步是拼接成sql awk ’{print 'insert into bak_db.tb_size(size,tb_route)values('''$0}’ /usr/local/data_size/data_size >/usr/local/data_size/data_size1 awk ’{print $0';'}’ /usr/local/data_size/data_size1 >/usr/local/data_size/data_size.sqlsed -i 's#t#,’#g' /usr/local/data_size/data_size.sqlsed -i 's#;#’);#g' /usr/local/data_size/data_size.sql# 創(chuàng)建統(tǒng)計表 /usr/local/mysql5.7/bin/mysql -uroot -p’Test#123456’ -h 192.168.28.132 -e 'drop table if exists bak_db.tb_size;CREATE TABLE IF NOT EXISTS bak_db.tb_size ( id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,size INT,tb_route VARCHAR(200),tbname VARCHAR(50),dbname VARCHAR(50),tb_rows INT(11));' # 導(dǎo)入數(shù)據(jù) /usr/local/mysql5.7/bin/mysql -uroot -p’Test#123456’ -h 192.168.28.132 -e 'use bak_db;truncate table bak_db.tb_size;source /usr/local/data_size/data_size.sql;'# 生成庫名及表名,當(dāng)然該步驟也可以從數(shù)據(jù)字段中獲取 /usr/local/mysql5.7/bin/mysql -uroot -p’Test#123456’ -h 192.168.28.132 -e 'use bak_db;UPDATE bak_db.tb_size SET tbname=REPLACE(SUBSTRING_INDEX(tb_route,’/’,-1),’.ibd’,’’);' /usr/local/mysql5.7/bin/mysql -uroot -p’Test#123456’ -h 192.168.28.132 -e 'UPDATE bak_db.tb_size SET dbname=LEFT (SUBSTRING_INDEX(tb_route,’/’,-2),INSTR(SUBSTRING_INDEX(tb_route,’/’,-2),’/’)-1);'sleep 10 # 如果之前的步驟在主庫金學(xué)習(xí)學(xué)習(xí),則建議暫停一段時間 以免后面統(tǒng)計的時候無法獲得表及內(nèi)容,如果前面的步驟都在從庫,則可以省略該步驟echo ’start call procedure’ # 調(diào)用存儲過程 統(tǒng)計每個表的記錄條數(shù)/usr/local/mysql5.7/bin/mysql -uroot -p’Test#123456’ -h 192.168.28.132 -e 'use bak_db;call bak_db.p_db_size();'# 把表及數(shù)據(jù)導(dǎo)出/usr/local/mysql5.7/bin/mysqldump -uroot -p’Test#123456’ -h 192.168.28.132 --single-transaction bak_db tb_size >/usr/local/data_size/tb_size.sql# 將表及結(jié)果導(dǎo)入主庫(從庫相當(dāng)于刪除在重建了一次)/usr/local/mysql5.7/bin/mysql -uroot -p’Test#123456’ -h 192.168.28.128 -e 'use bak_db;source /usr/local/data_size/tb_size.sql;'

結(jié)果如下:

實例講解MySQL統(tǒng)計庫表大小

可以看出精確值與統(tǒng)計信息里的值差異還是很大的,且表越大 差異越明顯。

TIPS: 本文精確統(tǒng)計的腳本還有許多優(yōu)化空間,寫的比較倉促,大家可以按需自行調(diào)整,水平有限,歡迎斧正。如有問題,歡迎與我溝通。

以上就是實例講解MySQL統(tǒng)計庫表大小的詳細(xì)內(nèi)容,更多關(guān)于MySQL統(tǒng)計庫表大小的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 国产成人自拍偷拍 | 欧美啪视频 | 日韩成人一区 | 可以免费看的黄色网址 | 日韩一区欧美 | 圆产精品久久久久久久久久久 | 久久综合九色 | 亚洲高清自拍 | 成人黄色小视频在线观看 | 国产精品二区在线观看 | 三上悠亚作品在线观看 | 欧美色人阁 | 一区二区三区精品 | 一级片久久 | 人人草超碰| 亚洲国产第一区 | av男人的天堂在线 | 亚洲v在线观看 | 六月婷婷在线 | 国产精品一区二区av | 国产伦精品一区二区三区四区视频 | 97av在线视频 | 精品一区在线 | 欧美一区二区视频在线观看 | 九九精品热 | 99热香蕉| 欧美三级日本三级 | 亚洲自拍中文字幕 | 九九视频网 | 国产91高清 | 91插插插影库永久免费 | 欧美日韩精品免费观看 | 五月婷婷在线观看视频 | 欧美日韩高清一区二区三区 | 午夜激情久久 | 国产精品热 | 91精品综合久久久久久五月天 | 色妞色视频一区二区三区四区 | 欧美天堂在线观看 | 亚洲一区二区三区四区在线观看 | 成人免费视频观看视频 |