mysql有點 常見的MySQL面試點(三)

2021-10-18 22:35:53 字數 1927 閱讀 2704

1. 如何減少資料庫連線數?

當資料庫連線數過多時,通過show processlist 檢視連線狀態,id等資訊,使用kill connection +id中斷連線。

2. mysql是怎麼保證資料不丟失的?

只要保證redolog和binlog持久化磁碟,就能保證mysql資料不丟失,redolog用於宕機後資料恢復,binlog用於記錄每次事務操作;

binlog持久化過程是:開啟事務後,先把日誌記錄到binlog cache,提交事務的時候binlog cache再write寫到binlog當中,最後binlog再fsync到磁碟中。引數 sync_binlog 控制write 和fsync的時機;

• sync_binlog = 0 表示每次提交只wirte,等到binlog記憶體用完的時候再fsync到磁碟中,預設為0;

• sync_binlog = 1 表示每次提交後都進行fsync到磁碟中,建議設為1;

• sync_binlog = n 表示每次提交後都wirte,累積n個事務後再flush,不建議因為宕機後可能無法恢復最近的n個事務。

redolog是乙個固定大小的迴圈寫入,持久化過程和binlog類似,先寫入cache中,再寫入磁碟中。innodb_flush_log_at_trx_commit控制redolog的寫入策越。innodb_flush_log_at_trx_commit寫入策越和 sync_binlog 相似,也推薦設為1;(著名的雙1設定)。時序上,開啟事務後redolog先prepare,再寫binlog,最後提交redolog。

3. mysql是怎麼做到主從同步的?

主庫開啟事務後將日誌寫入binlog當中,然後從庫讀取binlog上的日誌,寫入中轉日誌(relaylog)中,執行緒讀取中轉日誌後並執行sql。

binlog存在三種格式 statement,row,mixed。

• statement:binlog記錄的是sql原文,例如delete from t where id = 1 ,系統預設值。

• row:binlog記錄的是受影響的具體所有資料,例如delete from t where id = 1 ,binlog會記錄id =1這一行的所有資料,缺點是binlog會占用空間變大,優點是可以用於資料恢復,推薦設為1 ,誤操作後可以用mysqlbinlog ,binlog2sql做資料恢復。

• mixed 是row和statement的混合體,系統會根據影響資料的大小做判斷,使用statement 還是 row。

4. 大查詢會不會把記憶體用光?

不會, mysql查詢採用的是邊查邊發的邏輯,但是大查詢比較耗費io資源。

5. 使用join時需要注意的地方?

假設t為大表10w行資料,t1為小表100行資料。

explain select * from t1 left join t on t1.a = t.a;

• 當兩個表關聯條件中a欄位都存在索引時,執行流程是遍歷t1所有行,取出每一行的t1.a欄位去t表中進行查詢,滿足條件則組成結果集。掃瞄行數為t1為全表掃瞄 , t表的查詢是走b+樹搜尋,掃瞄行數大概為200行,判斷行數為100行。結論是使用小表作為驅動表,大表作為被驅動表,

• 當關聯條件中t表a欄位不存在索引時,檢視語句的執行計畫,發現t表和t1表都是走的全表掃瞄,執行流程是遍歷t1表所有行資料放入記憶體join_buffer中,然後掃瞄t表資料和join_buffer資料做判斷,滿足條件則組成結果集。掃瞄行數10w+100行,判斷行數為1000w行資料。結論是大表的關聯條件中盡量走索引,使判斷行數和掃瞄行數盡量少一些。

• 其次當join_buffer滿了的時候,驅動表會分段存放,但是被驅動表又需要重新整表掃瞄比較剩餘行數,結論是驅動表的存放到join_buffer的資料盡可能小,或者修改調大join_buffer_size引數。

• 小表和大表? 小表是指加了where條件之後,資料較少的表才叫小表。當兩個表的行數都相同時,再比較兩個表存放在join_buffer中較小的表作為驅動表。

MySql 前言有點用 1

伺服器 客戶端 不會真有人不會安裝吧?安裝的時候會直接 客戶端 和 伺服器端 都安裝了 伺服器端 一句話,就是開啟服務 開啟胸膛,你來存或者取 以我的小mac為例子 在 usr local mysql bin目錄下,有如下的執行檔案,其中我框起來的是可以啟動mysql伺服器的命令 window下 應...

mysql常見的優化策略 Mysql常見的優化策略

資料庫設計方面優化 1 資料庫設計符合第三正規化,為了查詢方便可以有一定的資料冗餘。2 選擇資料型別優先順序 int date,time enum,char varchar blob,選擇資料型別時,可以考慮替換,如ip位址可以用ip2long 函式轉換為unsign int型來進行儲存。3 對於c...

mysql 常見用法 mysql常見用法

檢視慢日誌 show variables like slow query log show variables like long query time 設定慢日誌記錄什麼樣的sql,預設10s log queries not using indexes 未使用索引的查詢也被記錄到慢查詢日誌中,一般...