当前位置:网站首页>高性能数据访问中间件 OBProxy(三):问题排查和服务运维
高性能数据访问中间件 OBProxy(三):问题排查和服务运维
2022-07-29 21:42:00 【InfoQ】
1 引言
2 问题排查
2.1 描述问题
<!-- 为了避免多次沟通确认,提升效率,请提供以下信息 -->
【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【问题现象及影响】
【附件】
2.2 分析问题

WARNERROR2.3 归类问题

- 登录失败:绝大部分都是某个地方配置出现问题,比较容易复现和排查。
- SQL 执行:出现问题种类很多,有些疑难问题很难排查 。
- 返回错误:后端服务返回明确的错误码,根据错误码去 OBServer 和 OBProxy 断排查。
- 慢 SQL:需要确定每个模块的耗时,找到瓶颈点去优化,除了 2.2 中的模块,网络也是一个重要因素。
- 断连接:和慢 SQL 类似,需要先排查哪个模块主动断开连接(主动发送 FIN 报文),然后排查具体模块。
2.4 总结
3 OBProxy 日志
3.1 错误日志
select obproxy_error from dualMySQL [test]> select obproxy_error from dual;
ERROR 1054 (42S22): Unknown column 'obproxy_error' in 'field list'
2022-07-11 10:26:09.358231,undefined,,,,ob9988.zhixin.lm.xx.xx.xx.xx:sys:test,OB_MYSQL,,,COM_QUERY,SELECT,failed,1054,select obproxy_error from dual,42423us,454us,0us,41222us,Y0-7F4B1EF653A0,,,,0,xx.xx.xx.xx:33041,Unknown column 'obproxy_error' in 'field list'
# 日志通过逗号分隔,如果SQL中有逗号,会通过%2C替代,通过tr ',' '\n'替换结果如下
1,2022-07-11 10:26:09.358231 #日志打印时间
2,undefined # sharding模式下逻辑租户名
3, # 无需关注,内部使用
4, # 无需关注,内部使用
5, # sharding模式下逻辑库名
6,ob9988.zhixin.lm.xx.xx.xx.xx:sys:test # 物理库信息(cluster:tenant:database)
7,OB_MYSQL # 数据库类型
8, # 逻辑表名
9, # 物理表名
10,COM_QUERY # SQL 命令(COM_QUERY、COM_STMT_PREPARE等)
11,SELECT # SQL 类型
12,failed # 执行结果(success/failed)
13,1054 # 错误码(succ时为空)
14,select obproxy_error from dual # SQL语句
15,42423us # 执行总耗时(ms,包括内部 SQL 执行耗时
16,454us # 预执行时间
17,0us # 建立连接时间
18,41222us # 数据库执行时间
19,Y0-7F4B1EF653A0 # OBProxy内部日志trace_id
20, # 无需关注,内部使用
21, # 无需关注,内部使用
22, # 无需关注,内部使用
23,0 # 无需关注,内部使用
24,xx.xx.xx.xx:33041 # 路由到的ObServer的地址信息
25,Unknown column 'obproxy_error' in 'field list' # 报错信息
3.2 审计日志
query_digest_time_threshold2022-07-11 10:26:09.358221,undefined,,,,ob9988.zhixin.lm.xx.xx.xx.xx:sys:test,OB_MYSQL,,,COM_QUERY,SELECT,failed,1054,select obproxy_error from dual,42423us,454us,0us,41222us,Y0-7F4B1EF653A0,,,,0,xx.xx.xx.xx:33041
select sleep(3) from dual2022-07-11 14:32:51.758265,undefined,,,,ob9988.zhixin.lm.xx.xx.xx.xx:sys:test,OB_MYSQL,,,COM_QUERY,SELECT,success,,select sleep(3),3041116us,409us,0us,3039883us,Y0-7F4B1CEA13A0,,,,0,xx.xx.xx.xx:33041
日志分析
1,2022-07-11 14:32:51.758265 #日志打印时间
2,undefined # sharding模式下逻辑租户名
3, # 无需关注,内部使用
4, # 无需关注,内部使用
5, # sharding模式下逻辑库名
6,ob9988.zhixin.lm.100.88.147.179:sys:test # 物理库信息(cluster:tenant:database)
7,OB_MYSQL # 数据库类型
8, # 逻辑表名
9, # 物理表名
10,COM_QUERY # SQL 命令(COM_QUERY、COM_STMT_PREPARE等)
11,SELECT # SQL 类型
12,success # 执行结果(success/failed)
13, # 错误码(succ时为空)
14,select sleep(3) # SQL语句
15,3041116us # 执行总耗时(ms,包括内部 SQL 执行耗时
16,409us # 预执行时间
17,0us # 建立连接时间
18,3039883us # 数据库执行时间
19,Y0-7F4B1CEA13A0 # OBProxy内部日志trace_id
20, # 无需关注,内部使用
21, # 无需关注,内部使用
22, # 无需关注,内部使用
23,0 # 无需关注,内部使用
24,xx.xx.xx.xx:33041 # 路由到的ObServer的地址信息
3.3 慢日志
slow_query_time_thresholdselect sleep(3) from dual2022-07-11 14:32:51.758270,undefined,,,,ob9988.zhixin.lm.xx.xx.xx.xx:sys:test,OB_MYSQL,,,COM_QUERY,SELECT,success,,select sleep(3),3041116us,409us,0us,3039883us,Y0-7F4B1CEA13A0,,,,0,xx.xx.xx.xx:33041
Slow Query[2022-07-11 14:32:51.758195] WARN [PROXY.SM] update_cmd_stats (ob_mysql_sm.cpp:8425) [74744][Y0-7F4B1CEA13A0] [lt=7] [dc=0] Slow Query: ((
client_ip={127.0.0.1:50422}, // 发送SQL的客户端地址
server_ip={xx.xx.xx.xx:33041}, // SQL被路由到的目标BOServer
obproxy_client_port={xx.xx.xx.xx:52052}, // 和OBServer连接的本地地址
server_trace_id=Y81100B7C0535-0005E3460FBBE3CD-0-0, // 目标OBServer中执行过程中的trace id
route_type=ROUTE_TYPE_NONPARTITION_UNMERGE_LOCAL, // SQL使用的路由策略
user_name=root, // 用户名
tenant_name=sys, // 租户名
cluster_name=ob9988.zhixin.lm.100.88.147.179, // 集群名
logic_database_name=, // 逻辑库名
logic_tenant_name=, // 逻辑租户名
ob_proxy_protocol=0, // 协议类型
cs_id=14, // client login时看到的connection id, proxy分配
proxy_sessid=7230691598940700681, // client 访问ob时内部记录connection id
ss_id=21,
server_sessid=3221588238, // SQL在目标observer中的connection id, observer 分配
sm_id=14,
cmd_size_stats={
client_request_bytes:20, // client发给proxy的请求包大小
server_request_bytes:38, // OBProxy发给目标observer的请求包大小
server_response_bytes:0, // 目标observer发给proxy的响应包大小
client_response_bytes:71}, // OBProxy发给client的响应包大小
cmd_time_stats={
client_transaction_idle_time_us=0, // 在事务中该条SQL与上一条SQL执行结束之间的间隔时间, 即client事务间隔时间
client_request_read_time_us=97, // OBProxy从client socket读取请求包的耗时
client_request_analyze_time_us=95, // OBProxy分析client的SQL耗时
cluster_resource_create_time_us=0, // OBProxy创建集群资源耗时(仅首次访问集群时需要创建)
pl_lookup_time_us=0, // 根据SQL获取涉及路由表的耗时
pl_process_time_us=0, // 对涉及路由表的进行筛选排序的耗时
congestion_control_time_us=21, // 根据SQL获取涉及黑名单信息的耗时
congestion_process_time_us=3, // 对涉及黑名单的进行检查过滤的耗时
do_observer_open_time_us=55, // 对目标observer获取可用连接的耗时, 包含connect_time
server_connect_time_us=0, // 对目标observer创建连接的耗时
server_sync_session_variable_time_us=0, // 对选择的目标连接进行初始化的耗时, 包括saved_login, 同步db, 同步系统变量, 同步last_insert_id, 同步start_trans
server_send_saved_login_time_us=0, // 对选择的目标连接进行saved login耗时
server_send_use_database_time_us=0, // 对选择的目标连接同步db耗时
server_send_session_variable_time_us=0, // 对选择的目标连接同步已修改的系统变量耗时
server_send_all_session_variable_time_us=0, // 对选择的目标连接同步所有系统耗时
server_send_last_insert_id_time_us=0, // 对选择的目标连接同步last_insert_id耗时
server_send_start_trans_time_us=0, // 对选择的目标连接同步start_trans/begin耗时
build_server_request_time_us=23, // 构建对目标server的请求包的耗时
plugin_compress_request_time_us=0, // 对请求包进行压缩耗时
prepare_send_request_to_server_time_us=409, // OBProxy接受到客户端请求,到转发到observer执行前总计时间,正常应该是前面所有时间之和
server_request_write_time_us=32, // OBProxy向目标server socket发送请求包的耗时
server_process_request_time_us=3039883, // 目标server该执行SQL的耗时
server_response_read_time_us=67, // OBProxy从目标server socket读取响应包的耗时
plugin_decompress_response_time_us=59, // 对响应包进行解压缩耗时
server_response_analyze_time_us=70, // 对响应包进行分析的耗时
ok_packet_trim_time_us=0, // 对响应包trim掉最后一个ok包的耗时
client_response_write_time_us=185, // OBProxy向client socket发送响应包的耗时
request_total_time_us=3041116}, // OBProxy处理该请求总时间, 等于前面所有耗时之和
sql=select sleep(3) //client的请求SQL
)

3.4 统计日志
2022-07-11 10:26:59.499204,undefined,,ob9988.zhixin.lm.xx.xx.xx.xx:sys:test,OB_MYSQL,SELECT,success,,1,1,0,0,41480us,332us,40369us
日志分析
1,2022-07-11 10:26:59.499204 #日志打印时间
2,undefined # sharding模式下逻辑租户名
3, # sharding模式下逻辑库名
4,ob9988.zhixin.lm.xx.xx.xx.xx:sys:test # 物理库信息(cluster:tenant:database)
5,OB_MYSQL # 数据库类型
6,SELECT # SQL 类型
7,success # 执行结果(success/failed)
8, # 错误码(succ时为空)
9,1 # 总请求数量
1 # 30 ms ~ 100 ms 请求数量
0 # 100 ms ~ 500 ms 请求数量
0 # 大于 500 ms 请求数量
41480us # 执行总耗时(ms,包括内部 SQL 执行耗时)
332us # 预执行时间
40369u # 数据库执行时间
3.5 主日志
syslog_level3.6 总结
4 服务运维
4.1 配置管理
# 查看日志级别
MySQL [(none)]> show proxyconfig like '%syslog_level%';
+--------------+-------+-----------------------------------------------------------------------------------+-------------+---------------+
| name | value | info | need_reboot | visible_level |
+--------------+-------+-----------------------------------------------------------------------------------+-------------+---------------+
| syslog_level | DEBUG | specifies the current level of logging: DEBUG, TRACE, INFO, WARN, USER_ERR, ERROR | false | USER |
+--------------+-------+-----------------------------------------------------------------------------------+-------------+---------------+
# 修改日志级别为INFO
MySQL [(none)]> alter proxyconfig set syslog_level = INFO;
Query OK, 0 rows affected (0.01 sec)
- name:配置名,所有配置项名字可以从参数说明文档获取。
- value:配置内容,主要是整型和字符串格式。当内容不合法时会报错。
- info:描述配置参数的具体信息。
- need_reboot:表示参数是否重启生效。这里需要注意有些参数虽然不需要重启,但有时只对新的连接生效。
4.2 内部命令

5 总结
6 课后互动
6.1 上期互动
6.2 本期互动
边栏推荐
猜你喜欢

中科院TextMind(文心)安装及使用

SwiftUI CoreData 教程之如何加速搜索速度

leetcode-593:有效的正方形

高等数学(第七版)同济大学 习题3-7 个人解答

给pdf添加已作废标识

华为畅享50 Pro评测:HarmonyOS加持 更流畅更安全

转:idea中language level设置

Add obsolete flag to pdf

HMS Core audio editing service audio source separation and spatial audio rendering, helping to quickly enter the world of 3D audio

一篇关于Web3.0如何走向安全时代的说明
随机推荐
GBASE 8s自定义存储过程和函数介绍
【AD】【持续更新ing】关于AD设计过程中一些小细节
SwiftUI Apple App Store 发布App的初学者完整指南
十一、HikariCP源码分析之HouseKeeper
Jenkins 如何玩转接口自动化测试?
程序员自由工作的三大痛点?一文教你统统解决
An article to understand service governance in distributed development
【R语言】【2】绘图base和lattice和ggplot2库
SwiftUI 手势大全之可用的手势类型有哪些(教程含源码)
GBASE 8s 自定义存储过程和函数示例
【CVPR2022】A Unified Query-based Paradigm for Point Cloud Understanding
24小时伦敦金走势图分析
【点云】M3DeTR: Multi-representation, Multi-scale, Mutual-relation 3D Object Detection with Transformers
leetcode122. Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II(简单)
GBASE 8s 自动删除正在被使用的数据库
E. XOR Tree(树形dp/异或/最近公共祖先)
全球都热炸了,谷歌服务器已经崩掉了
中科院TextMind(文心)安装及使用
GBASE 8s 如何并行执行update statistics
华东师范大学副校长周傲英:数据赋能,从数据库到数据中台