MySQL 資料函式庫效能最佳化是提升系統整體效能的關鍵。本文介紹一個以 Python 實作的自動化慢查詢分析模組,能監控慢查詢並提供最佳化建議。同時,隨著資料量的增長,企業需要更有效率的資料倉儲方案。本文也探討如何利用 Amazon EC2 和 S3 建構一個按需運算的雲端資料倉儲,解決資料分析需求和遠端備份問題,並分析成本效益和安全性。文章也探討了 Amazon Machine Images (AMIs) 的選擇、管理和不同儲存方式的比較,包含 S3-Backed 和 EBS-Backed AMIs 的優缺點,以及例項的生命週期管理,提供讀者在 AWS 環境中佈署和管理虛擬機器的實用。
自動化 MySQL 資料函式庫效能調校
慢查詢分析模組設計與實作
在 MySQL 資料函式倉管理中,監控和最佳化慢查詢是提升整體效能的關鍵步驟。本文將介紹一個自動化的慢查詢分析模組,透過 Python 程式語言實作對 MySQL 慢查詢的監控與分析。
模組設計
class SlowQueriesAdvisor:
def __init__(self):
self.log_slow = False
self.long_query_time = 0
self.total_slow_queries = 0
self.total_requests = 0
self.long_qry_ratio = 0.0 # 以百分比表示
self.threshold = 0.0001 # 以百分比表示
self.advise = ''
def process(self, **kwargs):
if kwargs['env_vars']['ServerSystemVariables']['log_slow_queries'] == 'ON':
self.log_slow = True
self.long_query_time = float(kwargs['env_vars']['ServerSystemVariables']['long_query_time'])
self.total_slow_queries = int(kwargs['env_vars']['ServerStatusVariables']['Slow_queries'])
self.total_requests = int(kwargs['env_vars']['ServerStatusVariables']['Questions'])
self.long_qry_ratio = (100. * self.total_slow_queries) / self.total_requests
def report(self, **kwargs):
print(self.__class__.__name__, 'reporting...')
if self.log_slow:
print("總請求數 %d 中有 %d 個慢查詢,比例為 %f%%" % (self.total_requests, self.total_slow_queries, self.long_qry_ratio))
print("目前設定執行時間超過 %f 秒的查詢被視為慢查詢" % self.long_query_time)
if self.long_qry_ratio < self.threshold:
print('目前慢查詢比例看似合理')
else:
print('似乎有大量慢查詢,建議調查並考慮增加 long_query_time 的值')
else:
print('慢查詢未被記錄,請設定 log_slow_queries 為 ON 以啟用追蹤')
內容解密:
__init__方法:初始化類別屬性,包括是否啟用慢查詢日誌、慢查詢時間門檻、總慢查詢數、總請求數、慢查詢比例及建議門檻。process方法:根據輸入的環境變數,處理 MySQL 的系統變數和狀態變數,以計算慢查詢比例。- 檢查
log_slow_queries是否啟用。 - 取得
long_query_time、Slow_queries和Questions的值,分別代表慢查詢的時間門檻、慢查詢總數和總請求數。 - 計算慢查詢比例。
- 檢查
report方法:根據處理結果生成報告。- 若啟用慢查詢日誌,則輸出慢查詢的統計資訊和建議。
- 若未啟用,則提示啟用慢查詢日誌以進行追蹤。
使用 Amazon EC2/S3 作為資料倉儲解決方案
隨著雲端運算的日益普及,許多企業開始考慮將資料倉儲遷移至雲端。Amazon Elastic Compute Cloud(EC2)和 Amazon Simple Storage System(S3)是亞馬遜提供的兩項主要雲端服務,分別用於虛擬運算和儲存。本章將探討如何利用 Python 控制 EC2 和 S3,以建立一個靈活且可擴充套件的資料倉儲解決方案。
問題定義與解決方案
許多新創公司面臨著資料分析的需求,但傳統的本地佈署架構可能無法滿足這類別需求。透過雲端運算服務,可以實作按需運算,從而節省成本並提高靈活性。
案例分析
假設有一家小型網路新創公司,提供線上服務並使用 MySQL 資料函式庫儲存資料。隨著使用者數量的增長,該公司需要進行資料分析以瞭解使用者行為。然而,直接在現有的資料函式庫伺服器上執行分析查詢可能會影響線上服務的效能。
透過使用 Amazon EC2 和 S3,可以建立一個臨時性的資料倉儲,用於執行資料分析任務,而無需影響現有的生產環境。同時,這樣的架構也提供了備份資料至遠端位置的能力,從而提高了資料的安全性。
使用 Amazon EC2/S3 作為資料倉儲解決方案
在現今的科技環境中,許多新創公司面臨著資料處理和分析的挑戰。這些公司通常需要處理大量的資料,但僅在特定的時間內需要強大的運算能力。本文將探討如何利用 Amazon EC2 和 S3 來建立一個按需運算的資料倉儲解決方案。
我們的解決方案
一種策略是使用按需運算的解決方案,例如 Amazon EC2。由於公司僅在偶爾需要處理能力時才需要虛擬伺服器,因此可以在必要時建立虛擬伺服器來執行計算。當計算完成後,可以安全地銷毀虛擬伺服器。在這種情況下,公司只需支付伺服器活躍的時間。目前,虛擬例項的成本從每小時 $0.02 到 $6.82 不等,具體取決於使用的記憶體和分配的虛擬 CPU 數量。
成本分析
如果資料分析每週進行一次,每次耗時八小時,那麼每月的總成本不會超過 $10(假設目前價格為每小時 $0.28 的超大型高記憶體例項)。這遠低於公司租用典型伺服器的成本。
然而,需要注意的是,新創公司面臨的第二個問題是缺乏遠端備份。Amazon 提供了一個高度可用且可擴充套件的儲存解決方案:其簡單儲存系統(S3)。與 EC2 類別似,您只需為使用的資源付費,並且對 S3 的儲存量沒有限制。目前,S3 的基本定價為每月每 GB $0.03。資料傳輸在上傳資料到 S3 時是免費的,但資料輸出(例如,從備份中還原)將花費每 GB $0.12。
注意事項
在使用 S3 時需要注意,因為總價格可能會累積到相當大的金額。一 TB 的資訊每月將花費 $30。儘管與目前的儲存價格相比這可能看起來很多(1TB 外部 USB 硬碟的價格為 $60,且是一次性費用),但請記住,您不僅獲得了儲存裝置,還獲得了資料保護。目前,標準的 Amazon S3 提供「在給定年份內,物件的耐用性為 99.999999999%,可用性為 99.99%」(http://aws.amazon.com/s3/)。
設計規範
為了滿足我們之前提出的所有需求和限制,我們將構建一個應用程式,該程式將在 EC2 中建立虛擬機器的新例項。虛擬機器將執行 MySQL 資料函式庫伺服器的例項,並可接受外部連線。資料函式庫檔案將儲存在單獨的、高度可用的卷(Elastic Block Store 卷)上。
應用程式的操作階段
該應用程式將在三個階段執行:初始化、處理和去初始化。在初始化階段,應用程式建立虛擬機器,將卷裝置附加到虛擬機器,並啟動 MySQL 伺服器。處理階段取決於您的處理需求;它通常包含資料傳輸和資料處理任務。最後,在去初始化階段,我們關閉遠端 MySQL 例項,解除安裝卷,建立快照,並銷毀虛擬機器。
快照的重要性
建立快照的原因是為了有一個參考點,可以在需要檢查特定時間點的資料狀態時還原到該點。可以將其視為版本控制系統。顯然,每個快照都會增加資料使用量,從而增加您的成本,因此您需要手動控制要維護的快照影像數量。
Amazon EC2 和 S3 簡介
目前,關於 Amazon EC2 和 S3 的最新書籍並不多。原因是這兩種技術(尤其是 EC2)正在迅速發展,使它們成為快速變化的目標。有一些好書,但不幸的是,它們已經有些過時了。
相關資源
一些關於 Amazon Web 服務的好手冊包括 James Murty 的《Programming Amazon Web Services: S3, EC2, SQS, FPS, and SimpleDB》(2008)和 George Reese 的《Cloud Application Architectures: Building Applications and Infrastructure in the Cloud》(2009)。
您還可以在每個 Web 服務的檔案頁面上找到大量資訊:
- Amazon EC2:http://aws.amazon.com/documentation/ec2/
- Amazon S3:http://aws.amazon.com/documentation/s3/
基本概念
本章將介紹這些 Web 服務的基本概念。儘管無法在單章中涵蓋所有必要資訊,但本章將為您提供足夠的資訊來開始使用 Amazon EC2 和 S3 Web 服務,並且您可以隨著對基本原理的熟悉而進一步探索。
認證和安全
在使用 EC2 和 S3 服務時,您必須向 AWS 系統進行身份驗證。有不同的方法可以做到這一點,不同的服務要求您提供稍微不同的資訊。有時,這可能會引起混淆,即哪種方法需要在哪裡使用,更重要的是,在哪裡取得這些資訊。
賬戶識別符號
每個賬戶都有一個唯一的 AWS 賬戶 ID 號,由 12 位數字組成,看起來像 1234-5678-9012。每個賬戶還有一個分配的規範使用者 ID,它是一個包含 64 個字母數字的字串。
AWS 賬戶編號用於在不同賬戶之間分享物件。例如,如果您想授予他人存取您的虛擬機器映像的許可權,您需要知道該人的 AWS 賬戶 ID。此 ID 用於除 S3 之外的所有 AWS 服務。
規範使用者 ID 僅在 S3 服務中使用。與 AWS 賬戶 ID 類別似,其主要目的是控制存取。
您可以在 http://aws.amazon.com/account/ 上點選“Security credentials”,然後滾動到網頁底部,找到包含所需資訊的部分,稱為“Account Identifiers”。
存取憑證
存取憑證用於每個 REST API 呼叫。這些金鑰也用於 Amazon S3 SOAP 呼叫。存取憑證分為兩部分。第一部分是存取金鑰 ID,用於標識請求者身份。第二部分是秘密存取金鑰,用於建立與每個 API 請求一起傳送的簽名。當 AWS 收到請求時,它透過使用相應的秘密存取金鑰(只有 AWS 知道)驗證簽名。只有有效的秘密存取金鑰才能建立可以被 AWS 秘密金鑰對應方驗證的簽名。這確保了請求是由有效的請求者傳送的。
這兩個金鑰都是長字母數字字串,可以在“Access Keys”選項卡下的“Access Credentials”部分找到。建議定期輪換金鑰。同時,請確保不向任何人透露秘密金鑰。
此圖示說明瞭使用 Amazon EC2 和 S3 建立資料倉儲解決方案的主要步驟,包括初始化、處理和去初始化階段。
使用 Amazon EC2/S3 作為資料倉儲解決方案
存取憑證管理
在 Amazon Web Services(AWS)中,存取憑證的管理是確保系統安全性的重要環節。最佳實踐是建立新使用者並生成存取金鑰 ID 和對應的秘密存取金鑰,而不是依賴根存取金鑰對。這可以透過導航到使用者帳戶管理控制檯來完成,網址為 https://console.aws.amazon.com/iam/home?#users。
X.509 憑證
X.509 憑證主要用於 SOAP API 請求。憑證由兩個檔案組成:X.509 憑證和私鑰檔案。X.509 憑證包含公鑰和相關的後設資料,用於解密請求中的簽名資訊。私鑰檔案用於建立數字簽名,必須保密。
生成 X.509 憑證時,會提供這兩個檔案。然而,私鑰不會儲存在 Amazon 系統中,因此如果丟失私鑰,必須重新生成 X.509 憑證。與存取憑證金鑰一樣,定期更換憑證是良好的做法。
EC2 金鑰對
EC2 金鑰對允許登入到新的虛擬機器例項。每個金鑰對由三部分組成:金鑰對名稱、私鑰檔案和公鑰。私鑰檔案用於建立 SSH 會話到新的虛擬機器例項,必須保密。公鑰儲存在 AWS 系統中,並在啟動虛擬機器例項時複製到執行系統中。
簡單儲存系統概念
從使用者的角度來看,S3 架構中只有兩個實體:資料物件和儲存桶。資料物件是實際儲存在 S3 基礎設施上的內容,由後設資料和資料負載兩部分組成。後設資料描述物件,由鍵值對組成,可以由開發者定義。資料負載是實際要儲存的內容,大小可以從 1 位元組到 5 GB。
儲存桶是包含資料物件的實體,不能包含其他儲存桶。物件名稱空間在每個儲存桶內是唯一的,但儲存桶名稱在全域性名稱空間中是唯一的。
S3 資源 URL
S3 資源 URL 的命名方案如下:
http://<儲存桶名稱>.s3.amazonaws.com/<物件名稱>
例如,圖 14-1 中的物件可以透過以下 URL 存取(假設已啟用公共存取許可權):
- http://bucket1.s3.amazonaws.com/objectA
- http://bucket1.s3.amazonaws.com/objectB
- http://example.com.s3.amazonaws.com/index.html
- http://example.com.s3.amazonaws.com/data/file.dat
託管靜態網站
由於 S3 物件可以透過 HTTP GET 請求存取,因此可以在 S3 上託管完整的靜態網站或動態網站的靜態部分。
彈性計算雲概念
Amazon EC2 是一個複雜的系統,與其他服務(如 S3)互動,提供完整的計算即服務解決方案。
Amazon Machine Images 和例項
Amazon Machine Image(AMI)是可啟動的作業系統映像,包含執行系統所需的所有套件。可以建立多個 AMI,例如,為了複製兩層 Web 系統,可以建立 Web 伺服器 AMI 和資料函式庫 AMI。
有許多公開可用的 AMI,可以從受信任的來源克隆並進行修改以建立自己的 AMI。
圖表說明
此圖示展示了 Amazon S3 中的儲存桶和物件之間的關係。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title MySQL資料函式庫效能調校與雲端倉儲方案
package "資料庫架構" {
package "應用層" {
component [連線池] as pool
component [ORM 框架] as orm
}
package "資料庫引擎" {
component [查詢解析器] as parser
component [優化器] as optimizer
component [執行引擎] as executor
}
package "儲存層" {
database [主資料庫] as master
database [讀取副本] as replica
database [快取層] as cache
}
}
pool --> orm : 管理連線
orm --> parser : SQL 查詢
parser --> optimizer : 解析樹
optimizer --> executor : 執行計畫
executor --> master : 寫入操作
executor --> replica : 讀取操作
cache --> executor : 快取命中
master --> replica : 資料同步
note right of cache
Redis/Memcached
減少資料庫負載
end note
@enduml圖表內容解密:
此圖表呈現了 S3 中的基本架構,分別展示了兩個儲存桶(bucket1 和 example.com)及其包含的物件(如 objectA、objectB 和 index.html)。每個儲存桶內包含多個物件,而每個物件都有其特定的名稱和內容。
此圖示清晰地表明瞭 S3 的層級結構,有助於理解如何在 S3 中組織和管理資料。
重點整理
- 存取憑證管理對於 AWS 的安全性至關重要。
- X.509 憑證和 EC2 金鑰對是用於不同目的兩種重要憑證。
- S3 由資料物件和儲存桶組成,具有特定的命名規則和 URL 結構。
- 可以在 S3 上託管靜態網站。
- EC2 提供了一個複雜的計算即服務解決方案,與 S3 等服務互動。
- AMI 是可啟動的作業系統映像,用於建立虛擬機器例項。
使用 Amazon EC2/S3 作為資料倉儲解決方案
瞭解 Amazon Machine Images (AMIs)
在 Amazon EC2 中,Amazon Machine Images(AMIs)扮演著至關重要的角色。AMI 是一種預先組態的虛擬機器映像檔,包含了作業系統、軟體應用程式和相關設定。使用者可以根據需求選擇適當的 AMI 來啟動虛擬機器,也就是所謂的「例項」(Instance)。
為何不應依賴公開的 AMIs?
不建議直接使用公開可用的 AMIs,因為一旦其建立者決定刪除該 AMI,您將無法再次使用它。即使您不打算對 AMI 進行任何修改,也建議您複製一份並建立私人 AMI,以確保在未來需要時能夠找到相同的環境。典型的 Linux AMI 在 S3 上的大小通常小於 1GB,按照每 GB 資料每月 $0.03 的標準費用計算,維護自己的 AMI 每年只需 $0.36。
AMI 與例項的關係
AMI 本身無法直接執行,您需要從中建立例項。例項是實際執行的虛擬機器,包含 AMI 中安裝的軟體。可以將 AMI 比作 Python 中的類別(Class),而例項則是根據該類別建立的物件(Object)。類別定義了屬性和方法(在作業系統術語中即軟體包),當需要執行這些方法時,您需要建立該類別的物件。同樣地,AMI 定義了虛擬機器的內容,而例項則是實際執行的虛擬機器。
儲存 AMIs 的選項
Amazon 提供了兩種儲存 AMIs 的方式:Amazon S3 儲存或 Amazon Elastic Block Store(EBS)快照。每種儲存方式決定了 AMI 的建立方式並影響其行為。
S3-Backed AMIs 與 EBS-Backed AMIs 的比較
| 方面 | EBS-Backed AMI | S3-Backed AMI |
|---|---|---|
| 大小限制 | EBS 卷的大小限制為 1TB,適合大型安裝。 | S3 支援的根分割區最大為 10GB,若根分割區需更大,則無法使用此方法。 |
| 停止執行中的例項 | 可以停止例項,此時虛擬機器不執行且不收費,但根分割區仍保留為 EBS 卷。可以從同樣的例項卷重新啟動例項。 | 無法停止例項,停止後例項將被終止,根分割區也會被銷毀,所有資料將遺失。 |
| 資料永續性 | 本地資料儲存可附著並用於儲存暫時資料。停止例項時,根分割區不會被分離,但本地儲存將遺失。可附加任意數量的 EBS 卷以永久儲存資料。 | 本地資料儲存可附著並用於儲存暫時資料。終止例項時,根分割區和本地儲存的資料都將遺失。可附加任意數量的 EBS 卷以永久儲存資料。 |
| 啟動時間 | 由於根分割區的資料立即可用於 EBS 卷,啟動時間較快。但虛擬機器在開始時會較慢,因為資料是逐步從快照中擷取的。 | 由於所有資料需要從 S3 擷取後再佈署到根分割區,啟動時間較慢。 |
| 建立新映像檔 | 只需一個 API 呼叫即可將現有的執行中的 AMI 複製到新的卷。 | 需要建立包含所有所需軟體包的作業系統映像檔,然後建立映像檔包並上傳到 S3。接著向 S3 上的映像檔包註冊 AMI。 |
收費模式
- EBS-Backed AMI:需支付卷快照費用(按完整卷大小計費)、停止狀態下的卷空間使用費(按完整卷大小計費)以及執行中的例項費用。
- S3-Backed AMI:需支付 S3 儲存 AMI 映像檔的費用(壓縮後的大小)、以及執行中的例項費用。
例項生命週期
S3-Backed 例項生命週期
S3-Backed 例項從儲存在 S3 的 AMI 映像檔建立。當例項被終止時,所有相關卷都會被銷毀,資料將遺失。您只需為 S3 儲存和虛擬機器的執行成本付費。
EBS-Backed 例項生命週期
EBS-Backed 例項在初始啟動時,從 EBS 快照建立根卷。例項可以處於執行或停止狀態。當例項執行時,您需支付處理能力和 EBS 卷的費用。當例項停止時,您只需支付 EBS 卷的費用。若您還原例項,所有根卷中的資料將被保留,因此您仍需為此付費。最終,若您決定銷毀例項,所有相關卷也將被銷毀,您無需再支付卷相關費用。
內容解密:
本章節主要討論了 Amazon EC2 中使用 AMIs 的重要性,以及如何選擇適合的儲存方式來佈署虛擬機器。其中,比較了 S3-Backed 和 EBS-Backed AMIs 在大小限制、停止執行中的例項、資料永續性、啟動時間、建立新映像檔以及收費模式等方面的差異。同時,也詳細介紹了兩種不同型別例項的生命週期,包括 S3-Backed 和 EBS-Backed 例項在啟動、執行、停止和終止等階段的行為和相關費用。透過這些分析,可以幫助讀者更好地理解如何在 Amazon EC2 環境中有效地管理和佈署虛擬機器,以滿足不同的業務需求。