總結大數(shù)據(jù)量數(shù)據(jù)庫的性能優(yōu)化方案

本篇文章主要講解數(shù)據(jù)庫的優(yōu)化方案以及如何配置主從復制,讀寫分離等。

數(shù)據(jù)庫性能瓶頸的主要原因

  1. 數(shù)據(jù)庫連接量
    2.表數(shù)據(jù)量
    命中索引
    未命中則會全表掃描
    硬盤級索引,存儲在硬盤中。
    3.硬盤資源限制(QPS/TPS)

數(shù)據(jù)庫優(yōu)化的方案

  1. sql優(yōu)化
  2. 緩存
  3. 設計好的索引
  4. 讀寫分離
  5. 分庫分表
    水平拆分(數(shù)據(jù)量按照一定規(guī)則拆分,同一張表)
    能夠解決數(shù)據(jù)庫連接量問題,數(shù)據(jù)表量大的問題,提高QPS與TPS
    垂直拆分(按照業(yè)務規(guī)則拆分,分拆不同的庫)
    解決數(shù)據(jù)庫連接問題,硬件資源限制。

讀寫分離與分庫分表

1、讀寫分離
區(qū)別讀、寫多數(shù)據(jù)源方式進行數(shù)據(jù)的存儲和加載。
數(shù)據(jù)的存儲(增刪改)一般指定寫數(shù)據(jù)源,數(shù)據(jù)的讀取查詢指定
讀數(shù)據(jù)源
(讀寫分離會基于主從復制)

2、分庫分表
對數(shù)據(jù)的庫表進行拆分,用分片的方式對數(shù)據(jù)進行管理。

1.垂直拆分



單庫按照業(yè)務規(guī)則進行拆分。

2.水平拆分
單表的數(shù)據(jù)量很大的時候,按照一定的規(guī)則進行拆分。

主從復制的原理

如下圖,左邊是主庫(Master),右邊是從庫(Slave),從主庫中每執(zhí)行一次新增、修改、刪除之外的非查詢語句,就寫入到一個binlog的日志文件中,然后從庫有一個線程,每一段時間,就從主庫中的binlog日志中取日志數(shù)據(jù),并一個線程去執(zhí)行sql語句。到達復制的效果。


考慮的問題:數(shù)據(jù)會有延遲,不同步的存在。

為什么會產(chǎn)生?
1,當master tps高于slave的sql線程所能承受的范圍
2,網(wǎng)絡原因
3,磁盤讀寫耗時

怎么判斷延遲?
1,show slave status \G; sends_behind_master 0(也是mycat的判斷方式)
2, mk-heartbeat timestamp 進行主從復制兩個表數(shù)據(jù)的時間搓的判斷

怎么解決延時問題?

1,配置更高的硬件資源
2,把IOthread 改變成 多線程的方式
? mysql5.6 庫進行多線程的方式
? GTID進行多線程的方式
3, 應用程序自己去判斷(mycat有這么方案)

mysql如何配置主從復制?

Msater主數(shù)據(jù)庫設置:

Master操作:
1.接入mysql并創(chuàng)建主從復制的用戶
create user m2ssync identified by 'Qq123!@#';
2.給新建的用戶賦權
GRANT REPLICATION SLAVE ON *.* TO 'm2ssync'@'%' IDENTIFIED BY 'Qq123!@#';
3.指定服務ID,開啟binlog日志記錄(y因為默認不開啟的),在my.cnf中加入
server-id=137    
log-bin=dbstore_binlog  //設置binlog的文件名
binlog-do-db=db_store  //做binlog日志記錄的時候,只做該數(shù)據(jù)庫的。要做多個,在后面加逗號分隔。

4.通過SHOW MASTER STATUS;查看Master db狀態(tài).

slave從數(shù)據(jù)庫配置

Slave操作:
1.指定服務器ID,指定同步的binlog存儲位置,在my.cnf中加入
server-id=101
relay-log=slave-relay-bin  //指定中期日志文件存儲位置
relay-log-index=slave-relay-bin.index  //指定索引的位置
read_only=1   //只讀模式
replicate_do_db=db_store  //只做該db相關的事情
2.接入slave的mysql服務,并配置change master to
master_host='192.168.8.137',
master_port=3306,master_user='m2ssync',master_p
assword='Qq123!@#',master_log_file='db_stoere_bi
nlog',master_log_pos=0;
3.start slave;
4. show slave status\G ;查看slave服務器狀態(tài)

判斷是否有配置好,可以看圖中: Slave_IO_Running以及Slave_SQL_Running是否為yes。

關于binlog日志的詳細使用與介紹:
https://www.cnblogs.com/Presley-lpc/p/9619571.html

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容