來源:Lu-Yu 發(fā)布時間:2018-11-03 16:43:20 閱讀量:1062
分庫分表
分庫分表也稱作分片技術(shù),主要作用是將存放在一個數(shù)據(jù)庫中的數(shù)據(jù)按照特定的方法進行拆分,分散存放在多個數(shù)據(jù)庫中,以達到分散多臺設(shè)備實現(xiàn)負載均衡
垂直分割
縱向切分,把一個表的表結(jié)構(gòu)拆分開來,形成多個表
實質(zhì)上就是把一個表的表結(jié)構(gòu)中的多個字段拆成多個組合,每個組合都自成一個表
水平分割
橫向切分,把一個表的表記錄切分成多個表
實質(zhì)上吧一個表中的數(shù)據(jù)拆成多個模塊,而表結(jié)構(gòu)沒有變化。
Mycat
mycat是基于java的分布式數(shù)據(jù)庫系統(tǒng),為高并發(fā)環(huán)境的分布式訪問提供解決方案
工作流程
Mycat有很多算法,每個算法都有專屬的標識字段,根據(jù)這些字段,mycat可以找到數(shù)據(jù)具體存儲的位置。
搭建mycat服務器
1. 裝包
1.1 安裝jdk,也就是java相關(guān)的軟件包
1.2 安裝 mycat-server 服務軟件包
2. 配置
修改配置文件server.xml
<user name="用戶名">
<property name="password">密碼</property>
<property name="schemas">邏輯庫名(用戶看到的庫名)</property>
<property name="readOnly">true(只讀權(quán)限設(shè)定,不寫這一行默認為讀寫權(quán)限)</property>
</user>
配置文件schema.xml
<table name="travelrecord" dataNode="dn1,dn2(結(jié)點名,根據(jù)自己的數(shù)據(jù)庫個數(shù)決定)" 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(這兩行也是根據(jù)數(shù)據(jù)庫個數(shù)決定)" />
<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<!-- 指定數(shù)據(jù)存儲節(jié)點的數(shù)據(jù)庫名,以及這個數(shù)據(jù)庫中存儲數(shù)據(jù)的庫名 -->
<dataNode name="dn1(結(jié)點名)" dataHost="localhost1(數(shù)據(jù)庫名)" database="db1" />
<!-- 給每個數(shù)據(jù)庫指定相應的信息 -->
<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="數(shù)據(jù)庫服務器IP:端口號(3306)" user="連接使用的用戶名"
password="密碼">
<!-- can have multi read hosts -->
</writeHost>
</dataHost>
3. 對數(shù)據(jù)庫服務器進行相關(guān)操作
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. 客戶端連接的時候,發(fā)現(xiàn)有很多空表,這些都是要自己修改創(chuàng)建的
2. 不過創(chuàng)建的時候,需要根據(jù)數(shù)據(jù)庫的具體算法進行,創(chuàng)建算法要求的字段(列)
系統(tǒng)優(yōu)化
設(shè)置最大并發(fā)數(shù)
# 查看設(shè)定的最大并發(fā)數(shù):
show variables like 'max_connections';
# 修改最大并發(fā)數(shù)
set max_connections=值;
# 查看歷史訪問最大并發(fā)數(shù):
show global status like 'max_used_connections';
設(shè)置的最優(yōu)值:
max_connections = max_used_connections / 0.85
設(shè)定的最大并發(fā)值 = 歷史最大并發(fā)數(shù) / 0.85
查看連接的詳細信息:
show processlist;
連接超時(單位秒)
connect_timeout 等待連接超時,當用戶在TCP三次握手連接的時候相應時間太久就會自動登出,一般時間不宜太高,默認10s
wait_timeout 等待關(guān)閉連接不活動超時,當從最后一次SQL語句操作開始計時,到下一個SQL語句間隔時間,過長久斷開,不過為了讓SQL語句能完整的執(zhí)行完,不宜太短,默認8小時
緩存控制(單位字節(jié))
key_buffer_size 用于MyISAM引擎的關(guān)鍵索引緩存大小
show global status like 'key_read%'; 如果查出來的值較低的時候提高這個緩存值
sort_buffer_size 為每個排序的線程分配此大小的緩存空間
提高此值可以提高order的group的執(zhí)行速度
read_buffer_size 為排序讀取表記錄保留的緩存大小
影響SQL查詢的相應速度,此值越大查詢越快
tread_buffer_size 允許保存在緩存中的被重用的線程數(shù)量
show gloabal status like 'threads_%'; 查看線程狀態(tài),以這個值的常值為線程數(shù)最優(yōu)
table_open_cache 為所有線程緩存的打開的表的數(shù)量
show global status like 'open%tables'; 查看已經(jīng)打開的表,是理想比例<=95%
優(yōu)化查詢緩存設(shè)置
show variables like 'query_cache%';
query_cache_limit 緩存最大存儲限制
query_cache_min_res_unit 緩存最小存儲單元
query_cache_wlock_invalidate 是否開啟寫鎖,如果開啟,當數(shù)據(jù)修改,就會自動把緩存中的數(shù)據(jù)刪除,下次用戶查看的時候就是到磁盤中找
優(yōu)化后作用表現(xiàn)(命中情況越高說明優(yōu)化的越好)
show global status like 'qcache%';
Qcache_hits 查詢緩存中的命中情況
Qcache_inserts 查詢請求總數(shù)
優(yōu)化思路
1. 查看硬件使用情況(cpu 內(nèi)存 存儲空間)
2. 查看網(wǎng)絡(luò)接口流量
3. 查看數(shù)據(jù)庫服務運行時,參數(shù)配置
show variables;
show global status;
并發(fā)連接數(shù)量 超時時間 重復使用的線程數(shù)量
多個線程同時打開表的數(shù)量
查詢緩存配置 索引緩存
處理不同查詢方式mysql存儲使用緩存設(shè)置
錯誤日志
默認已經(jīng)開啟,記錄數(shù)據(jù)庫所有錯誤信息
查詢?nèi)罩?/span>
記錄mysql數(shù)據(jù)庫中所有執(zhí)行的命令
啟動查詢?nèi)罩?,修改配置文?etc/my.cnf
sed -i '/\[mysqld\]/ageneral_log' /etc/my.cnf
不修改存儲位置,默認存在 /var/lib/myql/主機名.log 文件內(nèi)
如果需要修改查詢?nèi)罩镜奈恢?/span>
sed -i '/\[mysqld\]/ageneral_log_file=存儲位置' /etc/my.cnf
慢查詢?nèi)罩?/span>
記錄耗時較長或不使用索引的查詢操作
啟動慢查詢?nèi)罩?,修改配置文?etc/my.cnf
sed -i '/\[mysqld\]/alog-queries-not-using-indexes' /etc/my.cnf
sed -i '/\[mysqld\]/aslow-query-log' /etc/my.cnf
默認存儲在 /var/lib/myql/主機名-slow.log
如果想修改存儲位置
sed -i '/\[mysqld\]/aslow-query-log-file=存儲位置' /etc/my.cnf
默認統(tǒng)計的是查詢時間超過 10s的查詢記錄,如果想修改,命令如下
sed -i '/\[mysqld\]/along-query-time=數(shù)字' /etc/my.cnf
統(tǒng)計查看慢查詢?nèi)罩居涗浀膕ql命令
mysqldumpslow /var/lib/mysql/mysql51-slow.log
---------------------
作者:Lu-Yu
來源:CSDN
原文:https://blog.csdn.net/Yu1543376365/article/details/83450821
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!