十個非常棒的 MySQL DBA 面試題(附答案)
DBA 是數(shù)據(jù)可用性、性能和安全性的重要組成部分。獲得優(yōu)秀的 DBA 是任何公司可以做的最重要的事情之一,以確保他們的數(shù)據(jù)庫操作繼續(xù)正常工作。那么如何找到優(yōu)秀的 DBA 呢?
在這篇文章中,我將向您展示我在面試 DBA 候選人時喜歡問的一些問題。
性能至關(guān)重要,那么這位候選人是否知道MySQL如何調(diào)整和優(yōu)化?
1、首先:您會推薦哪些最常見的性能優(yōu)化?
這是關(guān)于概念性知識的,通常是一個開放式問題。他們是否正在考慮扔硬件和增加資源?這是最簡單的解決方案,但通常不是正確的解決方案。如果數(shù)據(jù)庫設(shè)計不佳,性能通常會受到限制。他們會談?wù)撨@個嗎?我希望人們討論最佳選擇,并決定哪些變量或修復(fù)最有意義。我在客戶那里看到的簡單答案是調(diào)整像“innodb_dedicated_server”這樣的單個變量,這當然有幫助,因為它是幾種配置的快捷方式,但如果你不正確理解它可能會導(dǎo)致一些不希望的傷害(比如很多不需要的重做日志文件)。我正在尋找人們了解快速問題和長期問題之間的區(qū)別。
2、在 IO 綁定的系統(tǒng)中,為了更好地利用 IO,您需要哪些主要調(diào)優(yōu)參數(shù)?
磁盤 IO 是任何數(shù)據(jù)庫中最慢的部分,任何 DBA 都必須了解這個概念。簡單的答案總是添加更多內(nèi)存,但這不僅僅是關(guān)于緩沖池。候選人是否了解影響 IO 的其他變量和數(shù)據(jù)庫內(nèi)部結(jié)構(gòu)?例如,他們是否了解重做日志、刷新、io_capacity 等,他們可以了解他們所做的事情嗎?這些變量的組合將減少 IO 依賴,同時延長 SSD 壽命。
3、你會接到電話說數(shù)據(jù)庫速度很慢。你是做什么的?你如何識別一個慢查詢?優(yōu)化查詢的最佳策略是什么?
查詢優(yōu)化是每個 DBA 都必須知道的活動。即使數(shù)據(jù)庫在 99% 的情況下看似快速且高性能,一個惡意或慢查詢也可能導(dǎo)致整個應(yīng)用程序癱瘓。在這里,我們正在尋找不僅找到慢查詢而且調(diào)整和修復(fù)它的過程。我們需要了解導(dǎo)致查詢速度慢的原因是什么,例如索引、SQL 編寫技巧不佳等。幸運的是,我們有工具可以識別壞人并幫助優(yōu)化過程。候選人決定使用的工具沒有他們經(jīng)歷的過程那么重要。我們正在尋找諸如識別缺失索引、錯誤主鍵、超大表問題、模式設(shè)計等的能力。
4、假設(shè)您需要將 MySQL 服務(wù)器的流量增加 10 倍。您的可擴展性策略是什么?讀取的縮放比例與寫入的縮放比例相同嗎?
這里有許多可擴展性策略。您不僅要尋找具體的技術(shù)或流程,還要尋找它們背后的原因。需要討論和深入研究的關(guān)鍵事項:添加副本以卸載流量、設(shè)置負載均衡器、增加可用硬件、分片等。所有這些都是有效的策略。真正的問題是候選人是否理解它們以及何時應(yīng)該使用和不應(yīng)該使用它們?
每個 DBA 都必須構(gòu)建并確保他們的數(shù)據(jù)庫系統(tǒng)在需要時可用。因此,了解數(shù)據(jù)庫可用性策略至關(guān)重要。必須提出問題來衡量他們的理解:
5、您如何解釋異步復(fù)制滯后?為什么會有問題呢?你會如何解決它呢?
異步復(fù)制仍然是一個非常重要的話題,雖然性能隨著 MySQL 的每個版本和修改而不斷提高,但我仍然在幫助很多客戶解決復(fù)制設(shè)置和延遲的問題。許多公司使用副本進行報告、備份和高可用性,因為我們希望我們的副本盡可能保持最新。好消息是,這也為候選人提供了另一個跳出框框思考的機會,因為異步復(fù)制延遲可能會受到數(shù)據(jù)庫設(shè)計問題的顯著影響,例如沒有主鍵、長時間運行的查詢、選擇更新等。
6、他們能解釋異步復(fù)制和同步復(fù)制之間的區(qū)別嗎?他們什么時候會選擇一個而不是另一個?
當然,您可以在 MySQL 中使用幾種不同類型的異步復(fù)制(MySQL GTID、MariaDB GTID、Tungsten Replicator)和同步復(fù)制(Percona XtraDB Cluster、MySQL Group Replication),因此了解他們的一般知識有助于評估他們的技能。雖然這里沒有 100% 正確的答案,但重要的是要了解選擇一種解決方案而不是另一種解決方案的決策驅(qū)動因素是什么,例如性能、一致性、可用性等。
7、基于 Galera 的解決方案最少需要多少個節(jié)點?添加更多節(jié)點的利弊是什么?
MySQL 領(lǐng)域有兩種主要的集群解決方案?;?Galera 的復(fù)制,如 Percona XtraDB 集群和基于組復(fù)制的集群,如 InnoDB 集群。這個問題的關(guān)鍵是要知道 Galera 是為一致性和可用性而設(shè)計的,而不是為編寫可伸縮性而設(shè)計的。理解這些差異非常重要,因為“更多的寫入器就更多的寫入”的想法是很常見的,就好像添加更多寫入器節(jié)點可能會增加集群的寫入容量。
當然,您需要確保候選人不僅知道如何排除性能故障和設(shè)置高可用性,還需要了解一些基本的數(shù)據(jù)庫操作和技術(shù)。至少詢問一個關(guān)于安全、備份和主機(云或非云)的問題,是確保您了解基本知識的好方法。
8、請描述您推薦的備份策略。你會使用什么工具以及如何使用?
了解備份的重要性很重要。我正在尋找能夠引導(dǎo)我了解他們的經(jīng)歷并告訴我他們認為什么是好的和安全的備份策略的人。當他們說話時,我會問一些問題,看看他們是否了解他們所運行的設(shè)置的限制或好處。我希望他們能夠掌握不同的備份選項(物理的、邏輯的)以及可以推薦的備份策略(每日、每周、每月、完整、增量等)。當然,我對人們?nèi)绾未_保他們的備份“良好”非常感興趣。不是每個人都認為恢復(fù)測試應(yīng)該被視為備份策略的一部分。
9、部署 MySQL 時您會遵循哪些基本安全策略?
這一次也還是沒有標準的答案,但毫無疑問,DBA 必須保護公司的數(shù)據(jù)。需要注意的一些事項:強密碼、只能從 localhost 進行 root 訪問、刪除沒有密碼的用戶、將 SUPER priv 刪除給非管理員用戶、限制用戶訪問他們自己的數(shù)據(jù)庫/表、加密數(shù)據(jù)等。
10、請解釋 RDS MySQL 和 Aurora 之間的主要區(qū)別。您何時會推薦一種解決方案而不是另一種?
毫無疑問,云已經(jīng)改變了我們運行數(shù)據(jù)庫的方式。候選人是否對 AWS 的前兩個 MySQL 選項之間的差異有基本的了解?他們是不同的,他們知道嗎?了解優(yōu)點和缺點是至關(guān)重要的。雖然 RDS 提供了一種簡單的方法來設(shè)置開箱即用的異步復(fù)制,但它需要一些操作活動來確保環(huán)境健康,即數(shù)據(jù)一致性檢查、在主故障時處理故障轉(zhuǎn)移等。另一方面, Aurora 通過以更高的成本和一些額外的寫入開銷確保一致性和可用性來解決操作部分,因此它可能無法在高流量環(huán)境中很好地擴展。