当前位置:网站首页>高性能数据访问中间件 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 本期互动
边栏推荐
- 【HDLBits 刷题】Verilog Language(4)Procedures 和 More Verilog Features 部分
- SwiftUI Apple App Store 发布App的初学者完整指南
- 解释器模式
- 第3章业务功能开发(线索关联市场活动,插入数据并查询)
- One of the uses of linkedlist: Get the address of the structure variable through the address of the structure member
- 阿里 P8 爆出的这份大厂面试指南,看完工资暴涨 30k!
- HMS Core audio editing service audio source separation and spatial audio rendering, helping to quickly enter the world of 3D audio
- Numpy数组处理(二)
- 【点云】M3DeTR: Multi-representation, Multi-scale, Mutual-relation 3D Object Detection with Transformers
- iNFTnews | 福布斯的Web3探索
猜你喜欢

解决报错 WARNING: IPv4 forwarding is disabled. Networking will not work.

INFTnews | Forbes Web3 exploration

全系都更换带T四缸,安全、舒适一个不落

OPEN数据 | 新库上线 | CnOpenDataA股上市公司社会责任报告数据

【R语言】【2】绘图base和lattice和ggplot2库

An article to understand service governance in distributed development

chrome集成沙拉查词

linux install redis using script

install mysql using script

02-SDRAM:自动刷新
随机推荐
解释器模式
GBASE 8s 数据索引
十一、HikariCP源码分析之HouseKeeper
【CVPR2022】A Unified Query-based Paradigm for Point Cloud Understanding
对不起,你很难赚到中年人的钱
小程序微信定位不准
第3章业务功能开发(线索关联市场活动,动态搜索)
容器网络硬核技术内幕 (小结-中)
An article to understand service governance in distributed development
容器网络硬核技术内幕 (小结-下)
03-树3 Tree Traversals Again(树的遍历)
bright day
INFTnews | Forbes Web3 exploration
qt中qstring合并字符串
5V升压充电8.4V芯片
容器网络硬核技术内幕 (26) 知微知彰,知柔知刚 (下)
"Introduction to nlp + actual combat: Chapter 7: Dataset loading in pytorch and the use of its own datasets"
Chrome浏览器打印flash log
GBASE 8s PAM插入式身份验证模块
亚马逊登录参数metadata1,encryptedPwd逆向分析