檢視某個表所佔空間,以及碎片大小。
select table_name,engine,table_rows,data_length+index_length length,data_free from information_schema.tables where table_schema='test';
或者select table_name,engine,table_rows,data_length+index_length length,data_free from information_schema.tables where data_free !=0;
| table_name | engine | table_rows | length | data_free |
| curs | innodb | 0 | 16384 | 0 |
| t | innodb | 10 | 32768 | 0 |
| t1 | innodb | 9 | 32768 | 0 |
| tn | innodb | 7 | 16384 | 0 |
table_name 表的名稱
engine :表的儲存引擎
table_rows 表裡存在的行數
data_length 表的大小(表資料+索引大小)
data_free :表碎片的大小
以上單位都是byte位元組
整理碎片過程會鎖邊,盡量放在業務低峰期做操作
1、myisam儲存引擎清理碎片
optimize table 表名,表名;
2、innodb儲存引擎清理碎片
alter table 表名 engine=innodb;
整理碎片過程會鎖邊,盡量放在業務低峰期做操作
1.mysql官方建議不要經常(每小時或每天)進行碎片整理,一般根據實際情況,只需要每週或者每月整理一次即可。
2.optimize table執行過程中,mysql會鎖定表。
3.預設情況下,直接對innodb引擎的資料表使用optimize table或指令碼**innodb表碎片
指令碼:(指令碼未測試)
#!/bin/bash
db=test
user=root
passwd=root123
host=192.168.2.202mysql_bin=/usr/local/mysql/bin
d_engine=innodb
$mysql_bin/mysql -h$host -u$user -p$passwd $db -e "select table_name from information_schema.tables where table_schema='"$db"'"';" | grep -v "table_name" >tables.txt
for t_name in`cat tables.txt`doecho"starting table $t_name......"sleep1$mysql_bin/mysql -h$host -u$user -p$passwd $db -e "alter table $t_name engine='"$d_engine"'"
if [ $? -eq 0] then
echo"shrink table $t_name ended." >>con_table.log
sleep1
elseecho"shrink failed!" >>con_table.log
fidone
mysql頻繁鎖邊原因排查 MySQL 碎片
檢視某個表所佔空間,以及碎片大小。select table name,engine,table rows,data length index length length,data free from information schema.tables where table schema test ...
Oracle使用者頻繁被鎖原因排查與解決
問題描述 專案小組同事說最近一段時間內,oracle使用者總是頻繁被鎖,導致應用及客戶端均無法登入運算元據庫。現象跟蹤 通過檢視監聽日誌listener.log,發現很多從10.1.3.107應用伺服器過來的訪問記錄,並伴有警告資訊出現,部分內容如下 05 aug 2015 03 49 57 con...
MySQL 簡單insert 一秒原因排查
這個問題是來自一位朋友 春波,我通過pstack最終確認問題,涉及到兩個引數的設定,我將從原始碼進行解釋,如果有誤還請見諒。1 簡單插入需要1秒 語句截圖如下 耗時截圖如下 2 profile展示 實際上這裡的query end是乙個非常有用的資訊,基本確認是在order commit函式上的等待。...