MYSQL 必考面試題10道(多選)

1、MySQL偶爾會出現OOM(內存溢出)現象,導致MySQl服務重啓,以下哪種方式能有效緩解OOM的情況發生()
A.適當調低innodb_buffer_pool_size大小,5.7之前需要重啓MySQL服務。
B.降低併發,避免查詢分組排序和更多table cache。
C.開啓swap。
D.將一個實例下庫表拆成多個庫表(分庫分表)。

2、INSERT BUFFER即合併插入緩存,從innodb 1.0.x版本開始引入CHANGE BUFFER,下面關於insert buffer說法正確的是()
A.合併插入只適用非唯一的輔助索引。
B.合併插入的目的是使隨機io變順序io,提升性能。
C.合併插入的頻率爲每1s和10s都會進行。
D.合併插入由master thread控制。

3、在MySQL的衆多存儲引擎中,只有InnoDB支持事務,關於事物隔離級別,以下說法錯誤的是()
A.Read uncommitted、Read committed 、Repeatable read、Serializable四種隔離級別並行性能依次降低,安全性依次提高。
B.髒讀是某一事務讀取了另外一個事務未提交的數據,不可重複讀是讀取了其他事務提交的數據,髒讀和不可重複讀都可以通過事物隔離級別控制。
C.RR隔離級別,只能返回比當前事務早的提交插入、更新、刪除值。
D.RR和RC隔離級別都存在幻讀,無法避免。

4、Innodb爲實現MVCC所使用的內部快照採用read view方式,關於read view 說法正確的是()
A.RR是每個事務重建讀視圖,整個事務存在期間都用這個視圖。
B.RC是每條SQL創建讀視圖,在每個SQL語句開始執行的時候創建的,隔離作用域僅限該條SQL語句。
C.Read uncommitted是不創建讀視圖的,直接返回記錄上的最新值。
D.read view 存在物理結構,跟普通視圖一樣,記錄當時事物執行時的數據信息。

5、Undo log回滾日誌,提供回滾操作,是爲了滿足事物的原子性,關於undo說法正確的是()
A.MySQL5.6版本以後支持獨立的undo表空間,可設置多個表空間。8.0之前默認爲128個回滾段,啓動後不能動態修改。5.7以後可以清理undo log。
B.undo log是爲了滿足事務的原子性,也可以用來輔助完成事務的持久化。
C.undo由purge cleaner thread控制,負責回收已經使用並分配的undo頁,事物提交時,會立即刪除undo log。
D.insert事物提交時,undo log直接刪除,不進行purge操作;update和delete操作會放入undo log鏈表,等待purge線程刪除。

6、關於MySQL Innodb 行記錄隱藏字段的說法正確的是()
A.每行記錄都有三個隱藏字段:事務ID(DB_TRX_ID)、回滾指針(DB_ROLL_PTR)、隱藏的ID(DB_ROW_ID)。
B.DB_TRX_ID記錄的是行變化發生時的版本號,而不是事件實際發生的時間。
C.DB_ROLL_PTR爲指向寫到rollback segment(回滾段)的一條undo log記錄。
D.DB_ROW_ID用於索引中,主鍵和唯一索引就是利用這個值實現。

7、MySQL默認頁的大小爲16K,操作系統爲4K,在意外掉電時很容易引起部分寫失敗問題,所以引入doablewrite來避免此問題,innodb_doublewrite參數可以控制是否開啓。以下關於double write的說法,正確的是()
A.髒頁和redo log都需要寫doublewrite,都是爲了解決部分寫失敗問題。
B.doublewrite由兩部分組成,一部分爲內存中的doublewrite buffer,另一部分爲磁盤上共享表空間中,大小都爲2M。
C.髒頁刷新過程爲先寫入doublewrite buffer中,再分兩次,每次1M寫入共享表空間中,然後再將doublewrite buffe髒頁離散寫入各個表空間文件中。
D.如果在寫入共享表空間時失敗,在恢復時會通過重做日誌重新寫入到doublewrite buffer;如果共享表空間寫入成功,但在寫入磁盤時失敗,在恢復時會用doublewrite空間中的數據來恢復異常頁面的數據。

8、MySQL的二進制日誌binlog可以說是MySQL最重要的日誌,關於binlog說法正確的是()
A.當指定了binlog大小,如果有大事物,一個binlog放不下,會放到下一個binlog中,而不會導致binlog超過指定大小。
B.如果主庫binlog格式爲statement,主庫執行分頁刪除時,可能造成從庫數據不一致。
C.主從複製時,binlog dump線程將binlog cache中event推送給從庫,而不是從binlog file中even推送給從庫。
D.從庫存在兩個用戶爲system user的線程,分別爲複製的io thread和sql thread。當從庫執行stop slave時,不會主動通知主庫的binlog dump線程。

9、MySQL Innodb數據是先寫到內存的,再將內存數據寫到磁盤,當髒頁刷盤的時候會產生檢查點,以下哪些情況會產生checkpoint()
A.flush lru list,如果free buffer少於1024個頁,則會觸發刷髒頁到磁盤產生checkpoint。
B.master thread,每1s、10s會觸發將髒頁刷到磁盤產生checkpoint。
C.dirty page too much,默認當buffer pool中max_dirty_page_pct達75%時,會將髒頁刷到磁盤產生checkpoint。
D.redo log full switch,重做日誌寫滿,切換日誌時會產生checkpoint。

10、不考慮組提交方式,當sync_binlog=1、innodb_flush_log_at_trx_commit=1時,一個事物的流程:加載數據頁到內存-->修改數據undo-->更新數據到內存-->寫入redolog(狀態爲prepare)-->寫binlog-->redolog flush-->binlog flush-->提交事務(redolog狀態修改爲commit)。MySQL爲了保證redo log 和binlog一致性,內部事物提交採用xa兩階段方式,以下關於這個事物的說法,正確的是()
A.如果redo log file中未提交,binlog file中存在,會將redo log中的這個未提交事物提交。
B.如果redo log file中未提交,binlog file中不存在,會將redo log中的這個未提交事物回滾。
C.如果redo log file中已提交,binlog file中存在,正常完成的事務,不需要恢復。
D.如果redo log file中已提交,binlog file中不存在,會將redo log中的這個提交事物回滾。

 

答案在微信公衆號:learnmysql

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章