mysql 表空間收縮 mysql壓縮表空間

2021-10-13 10:53:21 字數 2470 閱讀 4494

repair table `table_name` 修復表

optimize table `table_name` 優化表

optimize [local | no_write_to_binlog] table tbl_name [, tbl_name] ...

如果您已經刪除了表的一大部分,或者如果您已經對含有可變長度行的表(含有varchar, blob或text列的表)進行了很多更改,則應使用

optimize table。被刪除的記錄被保持在鏈結清單中,後續的insert操作會重新使用舊的記錄位置。您可以使用optimize table來重新

利用未使用的空間,並整理資料檔案的碎片。

在多數的設定中,您根本不需要執行optimize table。即使您對可變長度的行進行了大量的更新,您也不需要經常執行,每週一次或每月一次

即可,只對特定的表執行。

optimize table只對myisam, bdb和innodb表起作用。

注意,在optimize table執行過程中,mysql會鎖定表

# coding=utf-8# 特別說明:

import sys,os

import time,shutil,datetimefrommysql_helper import mysqlhelper

def main():

print datetime.datetime.now()

repair()

print datetime.datetime.now()

def repair():

mysqlclient= mysqlhelper('1.2.3.4', 'root', '密碼', "mysql")

# 取出基本滿足規則的資料庫名,後面再做進一步檢查

sql_str= "show databases;"rows= mysqlclient.select(sql_str)

db_list=for row inrows:

db_name= row[0]if db_name != 'mysql' and db_name != 'information_schema':

#print"===%s===" %(db_name)

n= 1# 判斷db是否符合規則

print"===%s===" %(db)

mysqlclient.select('use' + db + ';')

rows2= mysqlclient.select('show tables;');for row_2 inrows2:

table_name= row_2[0]

print"%s" %(table_name)

sql_repair= 'repair table' + table_name + ';'print sql_repair

sql_optimize= 'optimize table' + table_name + ';'print sql_optimize

mysqlclient.select(sql_repair)

mysqlclient.select(sql_optimize)if __name__ == '__main__':

main()

#!/usr/bin/python

import sys

import os

import mysqldbclassmysqlhelper:

def __init__(self, mysqlhost, mysqluser, mysqlpasswd, mysqldb):try:

self._conn= mysqldb.connect(host=mysqlhost, user=mysqluser,passwd=mysqlpasswd,db=mysqldb, charset='utf8')

except exception, e:

print e

def __del__(self):if self._conn isnot none:

self._conn.close()

defselect(self,sql_str):try:

_cursor=self._conn.cursor()

_cursor.execute(sql_str)

results=_cursor.fetchall()

_cursor.close()returnresults

except exception, e:

raise exception,e

def no_select(self,sql_str):try:

_cursor=self._conn.cursor()

_cursor.execute(sql_str)

self._conn.commit()

_cursor.close()

except exception, e:

raise exception,eif __name__=='__main__':

mysql= mysqlhelper()

mysql收縮空間 Oracle表空間收縮方案

對於表空間收縮,oracle只提供擴大的功能,而不提供收縮。所以,要實現這樣的要求,就只能先建立乙個中間表空間,然後將待收縮表 應用背景 某些情況下,由於前期設計上沒有考慮全面,導致表空間預建太大,遠遠超出實際使用大小。於是,就出現了收縮表空間這樣的需求,即將這個表空間的占用空間進行收縮。處理方案 ...

mysql如何收縮表空間

引數 innodb file per table mysql5.6.6版本以後,預設設定為on,表示innodb表資料儲存在乙個以.ibd為字尾的檔案中 不建議設定為off,原因是 設定為off後,會將表資料儲存在系統共享表空間中,即使drop掉表,空間也不會被 磁碟空間不會減少,只會無腦增加 資料...

收縮表空間大小

使用者所關聯的表都刪除了,但是表空間不能自己釋放。找到了下面一條sql語句,它的作用是查詢 拼接 出縮小表空間檔案 datafile 的語句,預設是計算所有的表空間檔案,給出可以釋放的大小。根據它給出的結果,執行類似 alter database datafile e oracle nnc data...