題目146
Choose two.
Which two are true about binary logs used in asynchronous replication?
□ A) The master connects to the slave and initiates log transfer.
□ B) They contain events that describe all queries run on the master.
□ C) They contain events that describe database changes on the master.
□ D) They are pulled from the master to the slave.
□ E) They contain events that describe only administrative commands run on the master.
翻譯
選擇兩項。
關于異步復制中使用的二進制日志,哪兩項是正確的?
□ A) 主庫連接到從庫并啟動日志傳輸。
□ B) 它們包含描述主庫上運行的所有查詢的事件。
□ C) 它們包含描述主庫上數據庫更改的事件。
□ D) 它們從主庫被拉取到從庫。
□ E) 它們僅包含描述主庫上運行的管理命令的事件。
解析和答案
- 選項A:在異步復制中,是從庫連接到主庫并請求二進制日志,而不是主庫連接到從庫,A錯誤。
- 選項B:二進制日志并不包含主庫上運行的所有查詢,例如一些不需要記錄的查詢(如
SELECT
語句,除非開啟了查詢日志等特殊設置)不會被記錄,B錯誤。 - 選項C:二進制日志主要記錄主庫上導致數據庫更改的事件,如
INSERT
、UPDATE
、DELETE
等操作,C正確。 - 選項D:在異步復制中,從庫主動從主庫拉取二進制日志,D正確。
- 選項E:二進制日志不僅包含管理命令,還包含數據更改等操作的事件,E錯誤。
綜上,正確答案是 CD。
知識點總結
- MySQL 異步復制:了解異步復制的工作原理,包括主庫和從庫之間的連接方式以及二進制日志的傳輸過程。
- 二進制日志內容:掌握二進制日志所包含的事件類型,主要是數據庫更改的事件,而不是所有查詢或僅管理命令。
- 復制中的日志拉取:理解在異步復制中,從庫如何獲取主庫的二進制日志,即從庫主動拉取主庫的二進制日志。
題目147
Choose the best answer.
Examine these entries from the general query log:
Time Id Command Argument
2019-12-17T00:36:23.389450Z 24 Connect root@localhost on mydb using SSL/TLS
2019-12-17T00:36:23.389754Z 24 Query select @@version_comment limit 1
2019-12-17T00:36:23.929519Z 25 Connect root@localhost on mydb using SSL/TLS
2019-12-17T00:36:23.929846Z 25 Query select @@version_comment limit 1
2019-12-17T00:36:27.633082Z 24 Query START TRANSACTION
2019-12-17T00:36:30.321657Z 24 Query UPDATE t1 SET val = 1 WHERE ID = 130
2019-12-17T00:36:32.417433Z 25 Query START TRANSACTION
2019-12-17T00:36:33.617642Z 25 Query UPDATE t2 SET val = 5 WHERE ID = 3805
2019-12-17T00:36:36.049458Z 25 Query UPDATE t1 SET val = 10 WHERE ID = 130
2019-12-17T00:36:38.513674Z 24 Query UPDATE t2 SET val = 42 WHERE ID = 3805
All UPDATE statements reference existing rows.
Which describes the outcome of the sequence of statements?
○ A) All statements execute without error.
○ B) A deadlock occurs immediately.
○ C) Connection 25 experiences a lock wait timeout.
○ D) A deadlock occurs after innodb_lock_wait_timeout seconds.
○ E) Connection 24 experiences a lock wait timeout.
翻譯
選擇最佳答案。
查看通用查詢日志中的這些條目:
Time Id Command Argument
2019-12-17T00:36:23.389450Z 24 Connect root@localhost on mydb using SSL/TLS
2019-12-17T00:36:23.389754Z 24 Query select @@version_comment limit 1
2019-12-17T00:36:23.929519Z 25 Connect root@localhost on mydb using SSL/TLS
2019-12-17T00:36:23.929846Z 25 Query select @@version_comment limit 1
2019-12-17T00:36:27.633082Z 24 Query START TRANSACTION
2019-12-17T00:36:30.321657Z 24 Query UPDATE t1 SET val = 1 WHERE ID = 130
2019-12-17T00:36:32.417433Z 25 Query START TRANSACTION
2019-12-17T00:36:33.617642Z 25 Query UPDATE t2 SET val = 5 WHERE ID = 3805
2019-12-17T00:36:36.049458Z 25 Query UPDATE t1 SET val = 10 WHERE ID = 130
2019-12-17T00:36:38.513674Z 24 Query UPDATE t2 SET val = 42 WHERE ID = 3805
所有 UPDATE 語句都引用了現有的行。
哪個描述了這些語句序列的結果?
○ A) 所有語句都無錯誤地執行。
○ B) 立即發生死鎖。
○ C) 連接 25 遇到鎖等待超時。
○ D) 在 innodb_lock_wait_timeout 秒后發生死鎖。
○ E) 連接 24 遇到鎖等待超時。
解析和答案
- 選項A:由于存在死鎖風險,不會所有語句都無錯誤執行,A錯誤。
- 選項B:連接24先更新了t1表的ID=130的行,連接25更新了t2表的ID=3805的行,然后連接25要更新t1表的ID=130的行(此時被連接24的事務鎖定 ),連接24要更新t2表的ID=3805的行(此時被連接25的事務鎖定 ),這種循環等待會立即導致死鎖,B正確。
- 選項C:不是連接25單獨遇到鎖等待超時,而是死鎖,C錯誤。
- 選項D:死鎖是立即發生的,不是等待
innodb_lock_wait_timeout
秒后,D錯誤。 - 選項E:不是連接24單獨遇到鎖等待超時,而是死鎖,E錯誤。
所以答案是B。
知識點總結
- 死鎖概念:了解死鎖的定義,即兩個或多個事務在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
- 死鎖產生條件:掌握死鎖產生的四個必要條件,包括互斥條件(資源不能被共享,只能由一個進程使用 )、請求與保持條件(進程已獲得資源,又對其他資源發出請求 )、不剝奪條件(進程已獲得的資源,在未使用完之前,不能被剝奪 )、循環等待條件(若干進程之間形成一種頭尾相接的循環等待資源關系 )。
- InnoDB死鎖檢測:清楚 InnoDB 存儲引擎會自動檢測死鎖,當檢測到死鎖時,會回滾其中一個事務,以打破死鎖。
- 事務與鎖:明白在 InnoDB 中,事務在執行
UPDATE
等操作時會對相關的行加鎖,不同的事務對同一行的操作會導致鎖競爭,從而可能引發死鎖。 - 死鎖處理:知道當發生死鎖時,MySQL 會自動選擇一個事務進行回滾,通常是回滾擁有最少行級鎖的事務,以解決死鎖問題。
- 鎖等待超時:了解
innodb_lock_wait_timeout
參數的作用,它用于設置事務等待行鎖的超時時間,當事務等待鎖的時間超過該值時,會發生鎖等待超時錯誤,而不是死鎖。 - 死鎖與鎖等待超時區別:區分死鎖和鎖等待超時的不同,死鎖是兩個或多個事務互相等待對方的鎖,而鎖等待超時是一個事務等待另一個事務的鎖超過了指定的時間。
- 事務隔離級別影響:明白不同的事務隔離級別(如
READ COMMITTED
、REPEATABLE READ
)可能會影響死鎖的發生概率和處理方式,REPEATABLE READ
是 InnoDB 的默認隔離級別,在該級別下可能更容易發生死鎖。 - 死鎖預防與避免:掌握一些預防和避免死鎖的方法,如按相同的順序訪問表和行、避免在事務中持有鎖的時間過長、使用更短的事務等。
- 日志分析:能夠通過分析通用查詢日志(general query log)等日志文件,識別事務的執行順序和鎖的競爭情況,從而判斷是否存在死鎖風險以及死鎖發生的原因。
題目148
Choose the best answer.
Examine this partial output for InnoDB Cluster status:
"topology": {"host1:3377": {"address": "host1:3377","mode": "R/W",[...]"status": "ONLINE","version": "8.0.18"},"host2:3377": {"address": "host2:3377","mode": "R/O",[...]"status": "(MISSING)"},"host3:3377": {"address": "host3:3377","mode": "R/O",[...]"status": "ONLINE","version": "8.0.18"}
}
Which statement explains the state of the instance deployed on host2?
○ A) It can rejoin the cluster by using the command cluster.addInstance(‘@host3:3377’).
○ B) It has been expelled from the cluster because of a transaction error.
○ C) It can be recovered from a donor instance on host3 by cloning using the command cluster.rejoinInstance(‘@host3:3377’).
○ D) It has been removed from the cluster by using the command STOP GROUP_REPLICATION;.
○ E) It can rejoin the cluster by using the command dba.rebootClusterFromCompleteOutage().
翻譯
選擇最佳答案。
查看 InnoDB Cluster 狀態的部分輸出:\
"topology": {"host1:3377": {"address": "host1:3377","mode": "R/W",[...]"status": "ONLINE","version": "8.0.18"},"host2:3377": {"address": "host2:3377","mode": "R/O",[...]"status": "(MISSING)"},"host3:3377": {"address": "host3:3377","mode": "R/O",[...]"status": "ONLINE","version": "8.0.18"}
}
哪條語句解釋了部署在 host2 上的實例的狀態?
○ A) 它可以通過使用命令 cluster.addInstance(‘@host3:3377’) 重新加入集群。
○ B) 由于事務錯誤,它已被驅逐出集群。
○ C) 它可以通過使用命令 cluster.rejoinInstance(‘@host3:3377’) 從 host3 上的捐贈者實例克隆來恢復。
○ D) 它已通過使用命令 STOP GROUP_REPLICATION; 從集群中移除。
○ E) 它可以通過使用命令 dba.rebootClusterFromCompleteOutage() 重新加入集群。
解析和答案
- 選項A:
cluster.addInstance
用于添加新實例,而不是讓缺失的實例重新加入,A錯誤。 - 選項B:狀態為
(MISSING)
不一定是因為事務錯誤,B錯誤。 - 選項C:當實例狀態為
(MISSING)
時,可以使用cluster.rejoinInstance
命令從在線的捐贈者實例(如 host3 )克隆數據來恢復,C正確。 - 選項D:
STOP GROUP_REPLICATION
是停止組復制,不是移除實例,D錯誤。 - 選項E:
dba.rebootClusterFromCompleteOutage
用于完全 outage 后的集群重啟,不是針對單個缺失實例,E錯誤。
所以答案是C。
知識點總結
- InnoDB Cluster 實例狀態:了解 InnoDB Cluster 中實例的不同狀態,如
ONLINE
、(MISSING)
等,以及每種狀態的含義和處理方法。 - 實例恢復命令:掌握用于恢復缺失實例的命令,如
cluster.rejoinInstance
,該命令可以從在線的捐贈者實例克隆數據來恢復缺失的實例。 - 集群管理操作:清楚不同的集群管理命令的作用,如
cluster.addInstance
(添加新實例 )、cluster.rejoinInstance
(恢復缺失實例 )、dba.rebootClusterFromCompleteOutage
(完全 outage 后的集群重啟 )等,以便在不同情況下選擇正確的命令進行操作。
題目149
Choose the best answer.
MySQL Enterprise Monitor Query Analyzer is configured to monitor an instance.
Which statement is true?
○ A) The Query Response Time index (QRTI) is fixed to 100ms and cannot be customized.
○ B) Enabling the events_statements_history_long
consumer allows tracking the longest running query.
○ C) An agent must be installed locally on the instance to use the Query Analyzer.
○ D) The Query Analyzer can monitor an unlimited number of normalized statements.
○ E) The slow query log must be enabled on the monitored server to collect information for the Query Analyzer.
翻譯
選擇最佳答案。
MySQL Enterprise Monitor Query Analyzer 已配置為監控一個實例。
哪個陳述是正確的?
○ A) 查詢響應時間指數(QRTI)固定為 100ms,無法自定義。
○ B) 啟用 events_statements_history_long
消費者允許跟蹤運行時間最長的查詢。
○ C) 必須在實例本地安裝代理才能使用 Query Analyzer。
○ D) Query Analyzer 可以監控無限數量的規范化語句。
○ E) 必須在被監控的服務器上啟用慢查詢日志才能為 Query Analyzer 收集信息。
解析和答案
- 選項A:查詢響應時間指數(QRTI)是可以自定義的,不是固定為 100ms,A錯誤。
- 選項B:
events_statements_history_long
主要用于記錄語句歷史,不一定能直接跟蹤運行時間最長的查詢,B錯誤。 - 選項C:MySQL Enterprise Monitor Query Analyzer 不需要在實例本地安裝代理,C錯誤。
- 選項D:Query Analyzer 可以監控無限數量的規范化語句,D正確。
- 選項E:雖然慢查詢日志可以提供信息,但 Query Analyzer 不一定依賴慢查詢日志,還可以通過其他方式收集信息,E錯誤。
綜上,正確答案是 D。
知識點總結
- MySQL Enterprise Monitor Query Analyzer:了解 MySQL Enterprise Monitor Query Analyzer 的功能和特點,包括其對語句的監控能力。
- 查詢響應時間指數(QRTI):掌握 QRTI 的作用和可配置性,以及如何根據實際需求進行調整。
- 監控代理與日志:理解 Query Analyzer 與監控代理、慢查詢日志等之間的關系,以及它們在監控過程中的作用。
題目150
Choose two.
Examine this query and its output:
mysql> select * from sys.user_summary_by_statement_type where statement in ('select', 'insert', 'Quit');
+------+----------+---------+----------------+-------------+-------------+-------------+--------------+--------------+-----------+
| user | statement| total | total_latency | max_latency | lock_latency| rows_sent | rows_examined| rows_affected| full_scans|
+------+----------+---------+----------------+-------------+-------------+-------------+--------------+--------------+-----------+
| app | select | 919866 | 2.41 h | 330.01 ms | 1.52 m | 542614816 | 542614816 | 0 | 919958 |
| app | insert | 923070 | 1.66 h | 287.41 ms | 1.65 m | 0 | 0 | 923026 | 0 |
| app | Quit | 679892 | 9.54 s | 170.97 ms | 0 ps | 0 | 0 | 0 | 0 |
| bob | select | 344964 | 53.61 m | 328.42 ms | 34.51 s | 203509545 | 203509542 | 0 | 344847 |
| bob | insert | 346159 | 37.94 m | 235.77 ms | 36.94 s | 0 | 0 | 346159 | 0 |
| bob | Quit | 254971 | 3.65 s | 69.91 ms | 0 ps | 0 | 0 | 0 | 0 |
| root | select | 230621 | 36.88 m | 21.47 s | 23.81 s | 135639074 | 135644067 | 0 | 230595 |
| root | insert | 231585 | 25.86 m | 364.22 ms | 31.45 s | 0 | 0 | 4150423 | 0 |
| root | Quit | 170363 | 2.24 s | 130.14 ms | 0 ps | 0 | 0 | 0 | 0 |
+------+----------+---------+----------------+-------------+-------------+-------------+--------------+--------------+-----------+
9 rows in set (0.00 sec)
Which two statements are true?
□ A) User bob had a significantly higher ratio of SELECT + INSERT statements to quit than both app and root users.
□ B) User bob had the largest total time waiting for locks.
□ C) The app user had the highest total number of rows read from storage engines.
□ D) The root user had the largest number of modified rows for a SELECT statement.
□ E) The root user had the largest single wait time.
翻譯
選擇兩個答案。
查看此查詢及其輸出:
mysql> select * from sys.user_summary_by_statement_type where statement in ('select', 'insert', 'Quit');
+------+----------+---------+----------------+-------------+-------------+-------------+--------------+--------------+-----------+
| user | statement| total | total_latency | max_latency | lock_latency| rows_sent | rows_examined| rows_affected| full_scans|
+------+----------+---------+----------------+-------------+-------------+-------------+--------------+--------------+-----------+
| app | select | 919866 | 2.41 h | 330.01 ms | 1.52 m | 542614816 | 542614816 | 0 | 919958 |
| app | insert | 923070 | 1.66 h | 287.41 ms | 1.65 m | 0 | 0 | 923026 | 0 |
| app | Quit | 679892 | 9.54 s | 170.97 ms | 0 ps | 0 | 0 | 0 | 0 |
| bob | select | 344964 | 53.61 m | 328.42 ms | 34.51 s | 203509545 | 203509542 | 0 | 344847 |
| bob | insert | 346159 | 37.94 m | 235.77 ms | 36.94 s | 0 | 0 | 346159 | 0 |
| bob | Quit | 254971 | 3.65 s | 69.91 ms | 0 ps | 0 | 0 | 0 | 0 |
| root | select | 230621 | 36.88 m | 21.47 s | 23.81 s | 135639074 | 135644067 | 0 | 230595 |
| root | insert | 231585 | 25.86 m | 364.22 ms | 31.45 s | 0 | 0 | 4150423 | 0 |
| root | Quit | 170363 | 2.24 s | 130.14 ms | 0 ps | 0 | 0 | 0 | 0 |
+------+----------+---------+----------------+-------------+-------------+-------------+--------------+--------------+-----------+
9 rows in set (0.00 sec)
哪兩個陳述是正確的?
□ A) 用戶 bob 的 SELECT + INSERT 語句與 Quit 語句的比率明顯高于 app 和 root 用戶。
□ B) 用戶 bob 的總鎖等待時間最長。
□ C) app 用戶從存儲引擎讀取的總行數最多。
□ D) root 用戶的 SELECT 語句修改的行數最多。
□ E) root 用戶的單次等待時間最長。
解析和答案
- 選項A:計算各用戶的 SELECT + INSERT 與 Quit 的比率,app 用戶的比率為 (919866 + 923070) / 679892 ≈ 2.71,bob 用戶的比率為 (344964 + 346159) / 254971 ≈ 2.70,root 用戶的比率為 (230621 + 231585) / 170363 ≈ 2.71,bob 用戶的比率并不明顯高于其他用戶,A錯誤。
- 選項B:查看
lock_latency
列,bob 用戶的總鎖等待時間為 34.51 s + 36.94 s = 71.45 s,app 用戶為 1.52 m + 1.65 m = 184.2 s,root 用戶為 23.81 s + 31.45 s = 55.26 s,bob 用戶的總鎖等待時間不是最長,B錯誤。 - 選項C:查看
rows_examined
列,app 用戶的rows_examined
為 542614816,是所有用戶中最高的,C正確。 - 選項D:SELECT 語句不會修改行,
rows_affected
列對于 SELECT 語句為 0,D錯誤。 - 選項E:查看
max_latency
列,root 用戶的max_latency
為 21.47 s,app 用戶為 330.01 ms,bob 用戶為 328.42 ms,root 用戶的單次等待時間最長,E正確。
所以答案是CE。
知識點總結
- sys 模式視圖:
sys.user_summary_by_statement_type
視圖用于匯總按用戶和語句類型分類的語句執行統計信息,包括執行次數、延遲、鎖等待時間、處理的行數等。 - 鎖等待時間:
lock_latency
列表示該用戶在執行該類型語句時的總鎖等待時間,通過比較不同用戶的鎖等待時間可以了解各用戶的鎖競爭情況。 - 數據讀取量:
rows_examined
列表示該用戶在執行該類型語句時從存儲引擎讀取的總行數,該值越高表示數據讀取量越大。 - 單次等待時間:
max_latency
列表示該用戶在執行該類型語句時的最大單次等待時間,該值可以反映語句執行的最大延遲情況。