亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

Linux數(shù)據(jù)庫管理——day10——分庫分表、數(shù)據(jù)庫硬件優(yōu)化

來源:Lu-Yu 發(fā)布時(shí)間:2018-11-03 16:43:20 閱讀量:880

分庫分表

    分庫分表也稱作分片技術(shù),主要作用是將存放在一個(gè)數(shù)據(jù)庫中的數(shù)據(jù)按照特定的方法進(jìn)行拆分,分散存放在多個(gè)數(shù)據(jù)庫中,以達(dá)到分散多臺(tái)設(shè)備實(shí)現(xiàn)負(fù)載均衡


    垂直分割

       縱向切分,把一個(gè)表的表結(jié)構(gòu)拆分開來,形成多個(gè)表

       實(shí)質(zhì)上就是把一個(gè)表的表結(jié)構(gòu)中的多個(gè)字段拆成多個(gè)組合,每個(gè)組合都自成一個(gè)表


    水平分割

       橫向切分,把一個(gè)表的表記錄切分成多個(gè)表

       實(shí)質(zhì)上吧一個(gè)表中的數(shù)據(jù)拆成多個(gè)模塊,而表結(jié)構(gòu)沒有變化。


Mycat

   mycat是基于java的分布式數(shù)據(jù)庫系統(tǒng),為高并發(fā)環(huán)境的分布式訪問提供解決方案


   工作流程

      Mycat有很多算法,每個(gè)算法都有專屬的標(biāo)識(shí)字段,根據(jù)這些字段,mycat可以找到數(shù)據(jù)具體存儲(chǔ)的位置。


   搭建mycat服務(wù)器

      1. 裝包

        1.1 安裝jdk,也就是java相關(guān)的軟件包

        1.2 安裝 mycat-server 服務(wù)軟件包

      2. 配置


        修改配置文件server.xml


        <user name="用戶名">

                <property name="password">密碼</property>

                <property name="schemas">邏輯庫名(用戶看到的庫名)</property>

                <property name="readOnly">true(只讀權(quán)限設(shè)定,不寫這一行默認(rèn)為讀寫權(quán)限)</property>

        </user>

        配置文件schema.xml


        <table name="travelrecord" dataNode="dn1,dn2(結(jié)點(diǎn)名,根據(jù)自己的數(shù)據(jù)庫個(gè)數(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ù)庫個(gè)數(shù)決定)" />

        <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />

 

        <!-- 指定數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)的數(shù)據(jù)庫名,以及這個(gè)數(shù)據(jù)庫中存儲(chǔ)數(shù)據(jù)的庫名 -->

        <dataNode name="dn1(結(jié)點(diǎn)名)" dataHost="localhost1(數(shù)據(jù)庫名)" database="db1" />

 

        <!-- 給每個(gè)數(shù)據(jù)庫指定相應(yīng)的信息 -->

        <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ù)庫服務(wù)器IP:端口號(hào)(3306)" user="連接使用的用戶名"

                        password="密碼">

                        <!-- can have multi read hosts -->

                </writeHost>

        </dataHost>

      3. 對(duì)數(shù)據(jù)庫服務(wù)器進(jìn)行相關(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. 啟動(dòng)服務(wù)


mycat start

netstat -ntlup | grep :8066 

   注意:

     1. 客戶端連接的時(shí)候,發(fā)現(xiàn)有很多空表,這些都是要自己修改創(chuàng)建的

     2. 不過創(chuàng)建的時(shí)候,需要根據(jù)數(shù)據(jù)庫的具體算法進(jìn)行,創(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

      查看連接的詳細(xì)信息:


show processlist;

連接超時(shí)(單位秒)

connect_timeout 等待連接超時(shí),當(dāng)用戶在TCP三次握手連接的時(shí)候相應(yīng)時(shí)間太久就會(huì)自動(dòng)登出,一般時(shí)間不宜太高,默認(rèn)10s

wait_timeout 等待關(guān)閉連接不活動(dòng)超時(shí),當(dāng)從最后一次SQL語句操作開始計(jì)時(shí),到下一個(gè)SQL語句間隔時(shí)間,過長久斷開,不過為了讓SQL語句能完整的執(zhí)行完,不宜太短,默認(rèn)8小時(shí)

 

緩存控制(單位字節(jié))

key_buffer_size 用于MyISAM引擎的關(guān)鍵索引緩存大小

show global status like 'key_read%'; 如果查出來的值較低的時(shí)候提高這個(gè)緩存值

sort_buffer_size 為每個(gè)排序的線程分配此大小的緩存空間

提高此值可以提高order的group的執(zhí)行速度

read_buffer_size 為排序讀取表記錄保留的緩存大小

影響SQL查詢的相應(yīng)速度,此值越大查詢?cè)娇?/span>

tread_buffer_size 允許保存在緩存中的被重用的線程數(shù)量

show gloabal status like 'threads_%'; 查看線程狀態(tài),以這個(gè)值的常值為線程數(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 緩存最大存儲(chǔ)限制

query_cache_min_res_unit 緩存最小存儲(chǔ)單元

query_cache_wlock_invalidate 是否開啟寫鎖,如果開啟,當(dāng)數(shù)據(jù)修改,就會(huì)自動(dòng)把緩存中的數(shù)據(jù)刪除,下次用戶查看的時(shí)候就是到磁盤中找

優(yōu)化后作用表現(xiàn)(命中情況越高說明優(yōu)化的越好)

show global status like 'qcache%';

Qcache_hits 查詢緩存中的命中情況

Qcache_inserts 查詢請(qǐng)求總數(shù)

優(yōu)化思路

   1. 查看硬件使用情況(cpu 內(nèi)存 存儲(chǔ)空間)

   2. 查看網(wǎng)絡(luò)接口流量

   3. 查看數(shù)據(jù)庫服務(wù)運(yùn)行時(shí),參數(shù)配置


 show variables;

 show global status;

  并發(fā)連接數(shù)量  超時(shí)時(shí)間   重復(fù)使用的線程數(shù)量

  多個(gè)線程同時(shí)打開表的數(shù)量

  查詢緩存配置   索引緩存

  處理不同查詢方式mysql存儲(chǔ)使用緩存設(shè)置


錯(cuò)誤日志

   默認(rèn)已經(jīng)開啟,記錄數(shù)據(jù)庫所有錯(cuò)誤信息


查詢?nèi)罩?/span>

   記錄mysql數(shù)據(jù)庫中所有執(zhí)行的命令

   啟動(dòng)查詢?nèi)罩?,修改配置文?etc/my.cnf


sed -i '/\[mysqld\]/ageneral_log' /etc/my.cnf

   不修改存儲(chǔ)位置,默認(rèn)存在 /var/lib/myql/主機(jī)名.log 文件內(nèi)

   如果需要修改查詢?nèi)罩镜奈恢?/span>


sed -i '/\[mysqld\]/ageneral_log_file=存儲(chǔ)位置' /etc/my.cnf

慢查詢?nèi)罩?/span>

    記錄耗時(shí)較長或不使用索引的查詢操作

    啟動(dòng)慢查詢?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

    默認(rèn)存儲(chǔ)在 /var/lib/myql/主機(jī)名-slow.log 

    如果想修改存儲(chǔ)位置


sed -i '/\[mysqld\]/aslow-query-log-file=存儲(chǔ)位置' /etc/my.cnf

    默認(rèn)統(tǒng)計(jì)的是查詢時(shí)間超過 10s的查詢記錄,如果想修改,命令如下


sed -i '/\[mysqld\]/along-query-time=數(shù)字' /etc/my.cnf

    統(tǒng)計(jì)查看慢查詢?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)載請(qǐng)附上博文鏈接!


標(biāo)簽: 數(shù)據(jù)庫
分享:
評(píng)論:
你還沒有登錄,請(qǐng)先