Linux資料庫管理——day10——分庫分表、資料庫硬體優化
分庫分表 分庫分表也稱作分片技術,主要作用是將存放在一個數據庫中的資料按照特定的方法進行拆分,分散存放在多個數據庫中,以達到分散多臺裝置實現負載均衡
垂直分割 縱向切分,把一個表的表結構拆分開來,形成多個表 實質上就是把一個表的表結構中的多個欄位拆成多個組合,每個組合都自成一個表
水平分割 橫向切分,把一個表的表記錄切分成多個表 實質上吧一個表中的資料拆成多個模組,而表結構沒有變化。
Mycat mycat是基於java的分散式資料庫系統,為高併發環境的分散式訪問提供解決方案
工作流程 Mycat有很多演算法,每個演算法都有專屬的標識欄位,根據這些欄位,mycat可以找到資料具體儲存的位置。
搭建mycat伺服器 1. 裝包 1.1 安裝jdk,也就是java相關的軟體包 1.2 安裝 mycat-server 服務軟體包 2. 配置
修改配置檔案server.xml
<user name="使用者名稱"> <property name="password">密碼</property> <property name="schemas">邏輯庫名(使用者看到的庫名)</property> <property name="readOnly">true(只讀許可權設定,不寫這一行預設為讀寫許可權)</property> </user>
配置檔案schema.xml
<table name="travelrecord" dataNode="dn1,dn2(結點名,根據自己的資料庫個數決定)" rule="auto-sharding-long" /> <!-- global table is auto cloned to all defined data nodes ,so can join with any table whose sharding node is in the same data node --> <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2(這兩行也是根據資料庫個數決定)" /> <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" /> <!-- 指定資料儲存節點的資料庫名,以及這個資料庫中儲存資料的庫名 --> <dataNode name="dn1(結點名)" dataHost="localhost1(資料庫名)" database="db1" /> <!-- 給每個資料庫指定相應的資訊 --> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="資料庫伺服器IP:埠號(3306)" user="連線使用的使用者名稱" password="密碼"> <!-- can have multi read hosts --> </writeHost> </dataHost>
3. 對資料庫伺服器進行相關操作
sed -i '/lower_case_table_names/d' /etc/my.cnf
sed -i '/\[mysqld\]/alower_case_table_names = 1' /etc/my.cnf
systemctl restart mysqld
4. 啟動服務
mycat start
netstat -ntlup | grep :8066
注意: 1. 客戶端連線的時候,發現有很多空表,這些都是要自己修改建立的 2. 不過建立的時候,需要根據資料庫的具體演算法進行,建立演算法要求的欄位(列)
系統優化 設定最大併發數
# 檢視設定的最大併發數:
show variables like 'max_connections';
# 修改最大併發數
set max_connections=值;
# 檢視歷史訪問最大併發數:
show global status like 'max_used_connections';
設定的最優值: max_connections = max_used_connections / 0.85 設定的最大併發值 = 歷史最大併發數 / 0.85 檢視連線的詳細資訊:
show processlist;
連線超時(單位秒) | |
connect_timeout | 等待連線超時,當用戶在TCP三次握手連線的時候相應時間太久就會自動登出,一般時間不宜太高,預設10s |
wait_timeout | 等待關閉連線不活動超時,當從最後一次SQL語句操作開始計時,到下一個SQL語句間隔時間,過長久斷開,不過為了讓SQL語句能完整的執行完,不宜太短,預設8小時 |
快取控制(單位位元組) | |
key_buffer_size | 用於MyISAM引擎的關鍵索引快取大小 |
show global status like 'key_read%'; 如果查出來的值較低的時候提高這個快取值 | |
sort_buffer_size | 為每個排序的執行緒分配此大小的快取空間 |
提高此值可以提高order的group的執行速度 | |
read_buffer_size | 為排序讀取表記錄保留的快取大小 |
影響SQL查詢的相應速度,此值越大查詢越快 | |
tread_buffer_size | 允許儲存在快取中的被重用的執行緒數量 |
show gloabal status like 'threads_%'; 檢視執行緒狀態,以這個值的常值為執行緒數最優 | |
table_open_cache | 為所有執行緒快取的開啟的表的數量 |
show global status like 'open%tables'; 檢視已經開啟的表,是理想比例<=95% |
優化查詢快取設定 | |
show variables like 'query_cache%'; | |
query_cache_limit | 快取最大儲存限制 |
query_cache_min_res_unit | 快取最小儲存單元 |
query_cache_wlock_invalidate | 是否開啟寫鎖,如果開啟,當資料修改,就會自動把快取中的資料刪除,下次使用者檢視的時候就是到磁碟中找 |
優化後作用表現(命中情況越高說明優化的越好) | |
show global status like 'qcache%'; | |
Qcache_hits | 查詢快取中的命中情況 |
Qcache_inserts | 查詢請求總數 |