重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
show tables即為顯示當前數據庫中所有的表。又如:
成都創新互聯專注于企業成都全網營銷推廣、網站重做改版、班戈網站定制設計、自適應品牌網站建設、HTML5建站、商城建設、集團公司官網建設、成都外貿網站建設、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為班戈等各大城市提供網站開發制作服務。
mysql use mysql
Database changed
mysql show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
可以看到,當前表的碎片率超高了,50.6%。
有三種辦法整理碎片
這三種操作都是先創建一個臨時表復制完成后再刪除舊表,所以在執行操作的過程中磁盤會先增大。
會鎖表
會鎖表
pt-online-schema-change - ALTER tables 無需鎖表。
整理結果很明顯,整理后碎片率0.3%。
這里有幾個參數需要介紹一下:
--dry-run
這個參數不建立觸發器,不拷貝數據,也不會替換原表。只是創建和更改新表。
--execute
表明你已經閱讀了文檔,并且確認要 alter the table。你必須配置這個參數來 alter the table。如果你不配置,那么工具將只進行一些安全檢查然后就退出了。這幫助確保你已經閱讀了文檔,并且了解如何使用該工具。如果你沒有閱讀這些文檔,那么不會設置該參數。
--critical-load
每次chunk操作前后,會根據show global status統計指定的狀態量的變化,默認是統計Thread_running。目的是為了安全,防止原始表上的觸發器引起負載過高。這也是為了防止在線DDL對線上的影響。超過設置的閥值,就會終止操作,在線DDL就會中斷。提示的異常如上報錯信息。
--max-lag
type: time; default: 1s
lag 滯后偏移
暫停數據拷貝,直到所有replicas的lag值低于該值。在每個 data-copy query (each chunk)后,工具會通過Seconds_Behind_Master查詢所有replica的 replication lag 。如果任何replica lag大于該值,那么工具會sleep --check-interval 秒,然后再次檢查所有replica。如果你指定 --check-slave-lag ,那么工具會檢查那臺server,而不是所有server。如果你想控制哪個提供工具的監控,配置DSN值 --recursion-method 。
工具會等待直到replicas停止lagging。如果任一replica停止,工具會一直處于等待狀態直到該replica啟動。 在所有replicas運行并且lagging不大的情況下,數據拷貝繼續。
工具在等待的時候,會打印進程報告。如果replica停止了,會立即打印進程報告,然后在每個進程報告期間重復。
--check-interval
type: time; default: 1
Sleep time between checks for --max-lag .
--max-load
選項定義一個閥值,在每次chunk操作后,查看show global status狀態值是否高于指定的閥值。該參數接受一個mysql status狀態變量以及一個閥值,如果沒有給定閥值,則定義一個閥值為為高于當前值的20%。注意這個參數不會像--critical-load終止操作,而只是暫停操作。當status值低于閥值時,則繼續往下操作。是暫停還是終止操作這是--max-load和--critical-load的差別。
--charset
簡寫: -A; type: string
設置默認字符集。如果值為 utf8,設置 Perl’s binmode on STDOUT to utf8,傳送 mysql_enable_utf8 參數到 DBD::mysql,然后在連接到MySQL后運行 SET NAMES UTF8 。其他的值也是在STDOUT設置 binmode,然后在連到MySQL后運行 SET NAMES 。
--check-replication-filters
檢查復制中是否設置了過濾條件,如果設置了,程序將退出
--nocheck-replication-filters
不檢查復制中是否設置了過濾條件
--set-vars
設置mysql的變量值
--check-slave-lag
檢查主從延遲
--no-version-check
不檢查版本,在阿里云服務器中一般加入此參數,否則會報錯
提高表查詢的效率最好的辦法是添加所有,不要怕冗余數據。
比如,一個表就一列name。存的是英文名字有兩千萬條數據。
如果直接查一個名字會很慢,這樣我們就可以建冗余列,比如number字數列,和head_letters第一個字母列。
這樣我們就可以建立多行索引(這里就不集體說怎么寫了)。
在查表的時候就可以通過number和head_letters和name。三個添加查詢。
這樣就可以提高查詢效率。