hhdb客户端介绍(12)

数据交换协议

数据库操作协议

使用通用的SQL语句。

实例调整协议

客户端提供实例调整向导功能,该页面可以引导进行数据库的内存、缓存功能调整。

数据库侧内存配置涉及如下对象:
1、InitialHeapSize:初始堆内存 (对应启动脚本中的-Xms配置,默认单位GB)
2、MaximumHeapSize:最大堆内存(对应启动脚本中的-Xmx配置,默认单位GB)
3、MaxDirectMemorySize: 直接内存(默认单位GB)

步骤1:客户端可以通过管理端口(默认3325)的 SELECT * FROM servermonitor 找到服务器当前的可用内存信息并展示

Memorytotal: 代表服务器总内存
Memoryavailable:代表服务器剩余可用内存

步骤2:客户端可以通过管理端口(默认3325)的 select * from server 找到数据库实例当前的内存配置和使用信息并展示

total_memory:代表数据库配置的总共可用内存 (启动脚本中的-Xms配置)
max_memory: 代表数据库配置的最大可用内存(启动脚本中的-Xmx配置)
max_direct_memory: 代表数据库配置的直接内存 (启动脚本中-XX:MaxDirectMemorySize配置)
used_memory: 当前已使用的内存
used_direct_memory: 当前已使用的直接内存

步骤3:根据情况给出如下推荐配置建议:

建议1:当服务器的Memorytotal - 4G > 数据库配置的total_memory, 客户端自动给到调整建议,例如当前服务器的总内存配置充足,可考虑扩充数据库服务的可用内存配置。此处可以提供输入框,并默认给到建议值,若用户修改,则客户端直接通过命令:
set jvmargs={"ms"="16G","mx="16G"}命令,向数据库侧发送设置的,数据库返回OK则代表设置成功(但需要重启生效)

建议2:当used_direct_memory>max_direct_memory*80% ,客户端自动给出调整建议,例如:根据当前数据库服务的直接内存已经达到上限,建议扩展可用缓存区域。此处可以提供输入框,并默认给到建议值,若用户修改,则客户端直接通过命令:
set jvmargs={"MaxDirectMemorySize"="24G"}命令,向数据库侧发送设置的,数据库返回OK则代表设置成功(但需要重启生效)

如果当前配置已经为最优,则客户端也需要给到相应友好提示。

注意:set jvmargs={"ms"="16G","mx="16G","MaxDirectMemorySize"="24G"} 命令数据库侧需要新开发功能,并在接受到命令后,同步到集群内其他计算节点成员中(暂时不考虑各个计算节点服务器配置不一样的情况),其中 set jvmargs={"ms"="16G","mx="16G"}指的时同时将启动脚本中的-Xms、-Xmx都配置为设置的值,set jvmargs={"MaxDirectMemorySize"="24G"}指的是将 -XX:MaxDirectMemorySize配置为指定的值。

要求2:如果实例调整向导功能 提供依据负载大小和服务器配置 自动设置或建议数据库进程/线程 配置的功能

实现方案:
客户端提供实例调整向导功能,该页面可以引导进行数据库的处理器数、线程数功能调整。

数据库侧处理器数、线程数配置涉及如下对象:

1、processors 处理器数
2、processorExecutor 各线程处理数
3、timerExecutor定时线程数

例如:
1、processors 处理器数设置16
2、processorExecutor 各线程处理数设置 12
3、timerExecutor定时线程数设置 4
则数据库重启后,从数据库管理端口查询出来的结果如下:

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

如果需要修改这些值,则客户端通过数据库的管理端口(默认3325)发送命令并返回成功即可:
set systemconfig={"processors":"16","processorExecutor":"12","timerExecutor":"4","adaptiveProcessor":"false"}

注意:其中adaptiveProcessor属于必须携带的属性,因为这个参数会控制重启数据库服务是否数据库自己根据环境配置线程数的功能,如果不携带,则可能配置后不能实际生效。

步骤1:客户端可以通过管理端口(默认3325)的 SELECT * FROM servermonitor 找到服务器当前的可用服务器CPU的线程信息cputhreads并展示(这个值可以当作逻辑核数):

根据当前服务器的CPU信息给到推荐配置建议,推荐建议如下(此处客户端可以提供可编辑的且已推荐默认值的配置界面):

逻辑核数(即cputhreads)>48时:
processors=逻辑核数/2
processorExecutor=6
timerExecutor=8

16<=逻辑核数<=48时:
processors=逻辑核数
processorExecutor=8
timerExecutor=4

逻辑核数<16时:
processors=逻辑核数
processorExecutor=4
timerExecutor=4

逻辑核数<8时,
processors=8
processorExecutor=4
timerExecutor=4

如果当前配置已经为最优,则客户端也需要给到相应友好提示。

注意:
以上所有配置,客户端在做实例配置调整后,需要提示用户:需重启服务器生效,且数据库需要暂时关闭参数:adaptiveProcessor以免服务重启后配置失效。

SQL调优协议

客户端支持 show processlist 语法(此命令MySQL也支持,通用型),将此语法发往数据库后,可展示show processlist 语法的详细信息,该语法执行结果中会包含State列,该列的值会包含以下状态,这些状态可当作不同级别数据库等待事件:

sleep 对应前端连接空闲
Query 有语句正在执行,且不属于下面明确指定的状态
Copying to tmp table on disk 使用磁盘临时表处理数据的状态
Writing to net 正在向前端写出数据的状态
Killed 正在kill的状态
Sending data 正在发送数据给计算节点
optimizing 正在优化执行计划(当前只有跨库join有此状态)
query end 查询正在进行最终处理(提前返回commit的后续处理、连接清理等)
Reading from net 正在从客户端读取数据到计算节点
Rolling back 事务正在回滚中
System lock 正在hold住
Flow control 正处于过载限流保护阶段

SQL调优向导,要求2:经验证如果SQL调优向导功能可查看系统以往的SQL执行历史,识 别工作负载和系统资源大额共享 应用的高负载或主要的SQL语句则判定测试项通过。

应对策略:这里可以参考https://dev.mysql.com/doc/refman/5.7/en/show-profile.html 的做法。

客户端增加开启SQL调优功能的按钮入口,当点击该按钮,相当于往数据库侧发送SET profiling = 1;语句,之后连接会话会自动记录当前SQL执行的所有记录(客户端无需关心),SQL执行完毕后,用户可以执行SHOW PROFILE CPU FOR QUERY X (客户端要能查询该类语法)来查看当前SQL的负载情况。当用户关闭SQL调优功能时,则直接退出当前会话断开连接即可。

posted @   恒辉信达  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示