更新時間:2019-12-24 11:37:25 來源:動力節(jié)點 瀏覽3346次
Question 1:
你目前接觸的mysql版本是什么?除了官方版本,還接觸過其他的mysql分支版本嘛?
產(chǎn)生分支的原因
許多開發(fā)人員認為有必要將其拆分成其他項目,并且每個分支項目都有自己的專長。該需求以及Oracle對核心產(chǎn)品增長緩慢的擔(dān)憂,導(dǎo)致出現(xiàn)了許多開發(fā)人員感興趣的子項目和分支
三個流行MySQL分支:Drizzle、MariaDB和Percona Server(包括XtraDB引擎)
MariaDB不僅是mysql的替代品,主要還是創(chuàng)新和提高mysql自有技術(shù)。
新功能介紹
multi-source replication 多源復(fù)制
表的并行復(fù)制
galera cluster集群
spider水平分片
tokuDB存儲引擎
XtraDB是innodb存儲引擎的增強版,可用來更好地發(fā)揮最新的計算機硬件系統(tǒng)性能,還包含在高性能模式下的新特性。它可以向下兼容,因為它是在innodb基礎(chǔ)上構(gòu)建,所以他有更多的指標(biāo)和擴展功能。而且它在cpu多核的條件下,可以更好地使用內(nèi)存,時數(shù)據(jù)庫性能提到更高!
Drizzle與mysql的差別就比較大了,并且不能兼容,如果想運行此環(huán)境,就需要重寫一些代碼了!
Question 2:
mysql主要的存儲引擎myisam和innodb的不同之處?
事務(wù)的支持不同(innodb支持事務(wù),myisam不支持事務(wù))
鎖粒度(innodb行鎖應(yīng)用,myisam表鎖)
存儲空間(innodb既緩存索引文件又緩存數(shù)據(jù)文件,myisam只能緩存索引文件)
存儲結(jié)構(gòu)
(myisam:數(shù)據(jù)文件的擴展名為.MYD myData ,索引文件的擴展名是.MYI myIndex)
(innodb:所有的表都保存在同一個數(shù)據(jù)文件里面 即為.Ibd)
5. 統(tǒng)計記錄行數(shù)
(myisam:保存有表的總行數(shù),select count(*) from table;會直接取出出該值)
(innodb:沒有保存表的總行數(shù),select count(*) from table;就會遍歷整個表,消耗相當(dāng)大)
Question 3:
Innodb的體系結(jié)構(gòu)簡單介紹一下?
談及到innodb的體系結(jié)構(gòu),首先要考慮mysql的體系結(jié)構(gòu),分為兩部分mysql的server層和存儲引擎層
先要跟面試官聊清楚mysql的整體方向,然后再去涉及innodb體系結(jié)構(gòu)
建議從三方面介紹innodb體系結(jié)構(gòu):內(nèi)存----線程-----磁盤
內(nèi)存中包含insert_buffer,data_buffer,index_buffer,redo_log_buffer,double_write
內(nèi)存刷新到磁盤的機制,redo,臟頁,binlog的刷新條件
各種線程的作用,master_thread,purge_thread,redo log thread,read thread,write thread,page cleaner thread
磁盤中存放著數(shù)據(jù)文件,redo log,undo log,binlog
Question 4:
mysql有哪些索引類型:
數(shù)據(jù)結(jié)構(gòu)角度上可以分:B+tree索引,hash索引,fulltext索引(innodb,myisam都支持)
存儲角度上可以分:聚集索引,非聚集索引
邏輯角度上可以分:primary key,normal key,單列,復(fù)合,覆蓋索引
Question 5:
mysql binlog有幾種格式:
1. statement
優(yōu)點:不需要記錄每一行的變化,減少了binlog日志量,節(jié)約了IO,提高性能
缺點:當(dāng)使用一些特殊函數(shù)的時候,或者跨庫操作的時候容易丟失數(shù)據(jù)
注:在生產(chǎn)中不建議使用
2. row
優(yōu)點:清晰記錄每行的數(shù)據(jù)信息,不會出現(xiàn)跨庫丟數(shù)據(jù)的情況
缺點:內(nèi)容當(dāng)記錄到日志中的時候,都將以每行記錄的修改來記錄,但就會產(chǎn)生大量的binlog,對于網(wǎng)絡(luò)開銷也比較大
注:生產(chǎn)中推薦使用
3. mixed
是mysql5.1的時候,一個過渡版本,DDL語句會記錄成statement,DML會記錄row。
注:生產(chǎn)中不建議使用
Qusetion 6:
mysql主從復(fù)制的具體原理是什么?
主服務(wù)器把數(shù)據(jù)更新記錄到二進制日志中,從服務(wù)器通過io thread向主庫發(fā)起binlog請求,主服務(wù)器通過IO dump thread把二進制日志傳遞給從庫,從庫通過io thread記錄到自己的中繼日志中。然后再通過sql thread應(yīng)用中繼日志中sql的內(nèi)容。
Qusetion 7:
數(shù)據(jù)庫中雙一是什么?
sync_binlog=1
innodb_flush_log_at_trx_commit=1
innodb_flush_log_at_trx_commit和sync_binlog 兩個參數(shù)是控制MySQL 磁盤寫入策略以及數(shù)據(jù)安全性的關(guān)鍵參數(shù)
innodb_flush_log_at_trx_commit設(shè)置為1,每次事務(wù)提交時MySQL都會把log buffer的數(shù)據(jù)寫入log file,并且刷到磁盤中去。
sync_binlog =N (N>0) ,MySQL 在每寫 N次 二進制日志binary log時,會使用fdatasync()函數(shù)將它的寫二進制日志binary log同步到磁盤中去
Qusetion 8:
如何監(jiān)控mysql replication復(fù)制延遲?
可以通過第三方工具 業(yè)界中的瑞士×××percona-toolkit中的命令,pt-heartbeat進行主從延遲監(jiān)控。
傳統(tǒng)方法,通過比較主從服務(wù)器之間的position號的差異值。
還可以通過查看seconds_behind_master估算一下主從延遲時間
Qusetion 9:
大表DDL語句,如何實施,才能把性能影響降到最低?
可以通過傳統(tǒng)方法導(dǎo)入導(dǎo)出數(shù)據(jù),新建一張與原表一樣的表結(jié)構(gòu),把需要執(zhí)行的ddl語句在無數(shù)據(jù)的新表執(zhí)行,然后把老表中的數(shù)據(jù)導(dǎo)入到新表中,把新表改成老表的名字
通過第三方工具 業(yè)界中的瑞士×××percona-toolkit中的命令,pt-online-schema-change進行在線操作
對于新版本的mysql(5.7)可以直接在線online ddl
Qusetion 10:
為什么要為innodb表設(shè)置自增列做主鍵?
1.使用自增列做主鍵,寫入順序是自增的,和B+數(shù)葉子節(jié)點分裂順序一致
2.表不指定自增列做主鍵,同時也沒有可以被選為主鍵的唯一索引,InnoDB就會選擇內(nèi)置的rowid作為主鍵,寫入順序和rowid增長順序一致
所以InnoDB表的數(shù)據(jù)寫入順序能和B+樹索引的葉子節(jié)點順序一致的話,這時候存取效率是最高
以上就是動力節(jié)點Java培訓(xùn)機構(gòu)小編介紹的“2020年Java數(shù)據(jù)庫筆試題大全”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級到高級)
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743