hhdb客戶端介紹(12)

數(shù)據(jù)交換協(xié)議

數(shù)據(jù)庫操作協(xié)議

使用通用的SQL語句。

實例調(diào)整協(xié)議

客戶端提供實例調(diào)整向?qū)Чδ?,該頁面可以引?dǎo)進行數(shù)據(jù)庫的內(nèi)存、緩存功能調(diào)整。

數(shù)據(jù)庫側(cè)內(nèi)存配置涉及如下對象:
1、InitialHeapSize:初始堆內(nèi)存 (對應(yīng)啟動腳本中的-Xms配置,默認單位GB)
2、MaximumHeapSize:最大堆內(nèi)存(對應(yīng)啟動腳本中的-Xmx配置,默認單位GB)
3、MaxDirectMemorySize: 直接內(nèi)存(默認單位GB)

步驟1:客戶端可以通過管理端口(默認3325)的 SELECT * FROM servermonitor 找到服務(wù)器當前的可用內(nèi)存信息并展示

Memorytotal: 代表服務(wù)器總內(nèi)存
Memoryavailable:代表服務(wù)器剩余可用內(nèi)存

步驟2:客戶端可以通過管理端口(默認3325)的 select * from server 找到數(shù)據(jù)庫實例當前的內(nèi)存配置和使用信息并展示

total_memory:代表數(shù)據(jù)庫配置的總共可用內(nèi)存 (啟動腳本中的-Xms配置)
max_memory: 代表數(shù)據(jù)庫配置的最大可用內(nèi)存(啟動腳本中的-Xmx配置)
max_direct_memory: 代表數(shù)據(jù)庫配置的直接內(nèi)存 (啟動腳本中-XX:MaxDirectMemorySize配置)
used_memory: 當前已使用的內(nèi)存
used_direct_memory: 當前已使用的直接內(nèi)存

步驟3:根據(jù)情況給出如下推薦配置建議:

建議1:當服務(wù)器的Memorytotal - 4G > 數(shù)據(jù)庫配置的total_memory, 客戶端自動給到調(diào)整建議,例如當前服務(wù)器的總內(nèi)存配置充足,可考慮擴充數(shù)據(jù)庫服務(wù)的可用內(nèi)存配置。此處可以提供輸入框,并默認給到建議值,若用戶修改,則客戶端直接通過命令:
set jvmargs={"ms"="16G","mx="16G"}命令,向數(shù)據(jù)庫側(cè)發(fā)送設(shè)置的,數(shù)據(jù)庫返回OK則代表設(shè)置成功(但需要重啟生效)

建議2:當used_direct_memory>max_direct_memory*80% ,客戶端自動給出調(diào)整建議,例如:根據(jù)當前數(shù)據(jù)庫服務(wù)的直接內(nèi)存已經(jīng)達到上限,建議擴展可用緩存區(qū)域。此處可以提供輸入框,并默認給到建議值,若用戶修改,則客戶端直接通過命令:
set jvmargs={"MaxDirectMemorySize"="24G"}命令,向數(shù)據(jù)庫側(cè)發(fā)送設(shè)置的,數(shù)據(jù)庫返回OK則代表設(shè)置成功(但需要重啟生效)

如果當前配置已經(jīng)為最優(yōu),則客戶端也需要給到相應(yīng)友好提示。

注意:set jvmargs={"ms"="16G","mx="16G","MaxDirectMemorySize"="24G"} 命令數(shù)據(jù)庫側(cè)需要新開發(fā)功能,并在接受到命令后,同步到集群內(nèi)其他計算節(jié)點成員中(暫時不考慮各個計算節(jié)點服務(wù)器配置不一樣的情況),其中 set jvmargs={"ms"="16G","mx="16G"}指的時同時將啟動腳本中的-Xms、-Xmx都配置為設(shè)置的值,set jvmargs={"MaxDirectMemorySize"="24G"}指的是將 -XX:MaxDirectMemorySize配置為指定的值。

要求2:如果實例調(diào)整向?qū)Чδ?提供依據(jù)負載大小和服務(wù)器配置 自動設(shè)置或建議數(shù)據(jù)庫進程/線程 配置的功能

實現(xiàn)方案:
客戶端提供實例調(diào)整向?qū)Чδ?,該頁面可以引?dǎo)進行數(shù)據(jù)庫的處理器數(shù)、線程數(shù)功能調(diào)整。

數(shù)據(jù)庫側(cè)處理器數(shù)、線程數(shù)配置涉及如下對象:

1、processors 處理器數(shù)
2、processorExecutor 各線程處理數(shù)
3、timerExecutor定時線程數(shù)

例如:
1、processors 處理器數(shù)設(shè)置16
2、processorExecutor 各線程處理數(shù)設(shè)置 12
3、timerExecutor定時線程數(shù)設(shè)置 4
則數(shù)據(jù)庫重啟后,從數(shù)據(jù)庫管理端口查詢出來的結(jié)果如下:

(上圖的show @@命令等同select * from )

如果需要修改這些值,則客戶端通過數(shù)據(jù)庫的管理端口(默認3325)發(fā)送命令并返回成功即可:
set systemconfig={"processors":"16","processorExecutor":"12","timerExecutor":"4","adaptiveProcessor":"false"}

注意:其中adaptiveProcessor屬于必須攜帶的屬性,因為這個參數(shù)會控制重啟數(shù)據(jù)庫服務(wù)是否數(shù)據(jù)庫自己根據(jù)環(huán)境配置線程數(shù)的功能,如果不攜帶,則可能配置后不能實際生效。

步驟1:客戶端可以通過管理端口(默認3325)的 SELECT * FROM servermonitor 找到服務(wù)器當前的可用服務(wù)器CPU的線程信息cputhreads并展示(這個值可以當作邏輯核數(shù)):

根據(jù)當前服務(wù)器的CPU信息給到推薦配置建議,推薦建議如下(此處客戶端可以提供可編輯的且已推薦默認值的配置界面):

邏輯核數(shù)(即cputhreads)>48時:
processors=邏輯核數(shù)/2
processorExecutor=6
timerExecutor=8

16<=邏輯核數(shù)<=48時:
processors=邏輯核數(shù)
processorExecutor=8
timerExecutor=4

邏輯核數(shù)<16時:
processors=邏輯核數(shù)
processorExecutor=4
timerExecutor=4

邏輯核數(shù)<8時,
processors=8
processorExecutor=4
timerExecutor=4

如果當前配置已經(jīng)為最優(yōu),則客戶端也需要給到相應(yīng)友好提示。

注意:
以上所有配置,客戶端在做實例配置調(diào)整后,需要提示用戶:需重啟服務(wù)器生效,且數(shù)據(jù)庫需要暫時關(guān)閉參數(shù):adaptiveProcessor以免服務(wù)重啟后配置失效。

SQL調(diào)優(yōu)協(xié)議

客戶端支持 show processlist 語法(此命令MySQL也支持,通用型),將此語法發(fā)往數(shù)據(jù)庫后,可展示show processlist 語法的詳細信息,該語法執(zhí)行結(jié)果中會包含State列,該列的值會包含以下狀態(tài),這些狀態(tài)可當作不同級別數(shù)據(jù)庫等待事件:

sleep 對應(yīng)前端連接空閑
Query 有語句正在執(zhí)行,且不屬于下面明確指定的狀態(tài)
Copying to tmp table on disk 使用磁盤臨時表處理數(shù)據(jù)的狀態(tài)
Writing to net 正在向前端寫出數(shù)據(jù)的狀態(tài)
Killed 正在kill的狀態(tài)
Sending data 正在發(fā)送數(shù)據(jù)給計算節(jié)點
optimizing 正在優(yōu)化執(zhí)行計劃(當前只有跨庫join有此狀態(tài))
query end 查詢正在進行最終處理(提前返回commit的后續(xù)處理、連接清理等)
Reading from net 正在從客戶端讀取數(shù)據(jù)到計算節(jié)點
Rolling back 事務(wù)正在回滾中
System lock 正在hold住
Flow control 正處于過載限流保護階段

SQL調(diào)優(yōu)向?qū)?,要?:經(jīng)驗證如果SQL調(diào)優(yōu)向?qū)Чδ芸刹榭聪到y(tǒng)以往的SQL執(zhí)行歷史,識 別工作負載和系統(tǒng)資源大額共享 應(yīng)用的高負載或主要的SQL語句則判定測試項通過。

應(yīng)對策略:這里可以參考https://dev.mysql.com/doc/refman/5.7/en/show-profile.html 的做法。

客戶端增加開啟SQL調(diào)優(yōu)功能的按鈕入口,當點擊該按鈕,相當于往數(shù)據(jù)庫側(cè)發(fā)送SET profiling = 1;語句,之后連接會話會自動記錄當前SQL執(zhí)行的所有記錄(客戶端無需關(guān)心),SQL執(zhí)行完畢后,用戶可以執(zhí)行SHOW PROFILE CPU FOR QUERY X (客戶端要能查詢該類語法)來查看當前SQL的負載情況。當用戶關(guān)閉SQL調(diào)優(yōu)功能時,則直接退出當前會話斷開連接即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容