通过OBProxy连接,查询很慢

【 使用环境 】开发/测试环境
【 OB or 其他组件 】OBServer、OBProxy
【 使用版本 】4.0.0-ce
【问题描述】OBProxy 连接查询很慢,直接连接OBServer查询正常
【问题现象及影响】
有IP为1、2、3的3个OBServer,同一个zone,OBProxy在3上。
集群环境请看另一个帖子: 创建表时报错[4722] [HY000]: log stream location leader does not exist - 社区问答- OceanBase社区-分布式数据库

用Navicat、DBeaver、Java程序等反复测试, select id from 表名;表只有7行记录。而且试过不同的表。连接OBProxy时,查询时间要5秒。直连OBServer查询正常。
查看执行计划:

|ID|OPERATOR |NAME |EST. ROWS|COST|

|0 |TABLE SCAN|pf_app_client|7 |5 |

Outputs & filters:

0 - output([pf_app_client.id]), filter(nil), rowset=256,
access([pf_app_client.id]), partitions(p0)

我又在机器2上新装了一个OBProxy4.0.0,测试还是有这个问题。

【附件】
obproxy.log (1.7 MB)
obproxy_digest.log (6.4 KB)
obproxy_slow.log (3.4 KB)
obproxy_stat.log (2.3 KB)
obproxy_trace.log (14.4 KB)

表结构能给一下吗?

都是很普通表,没有什么特殊字段。

CREATE TABLE pf_app_client (
id bigint(20) NOT NULL ,
user_id bigint(20) DEFAULT NULL,
account varchar(50) DEFAULT NULL ,
client_id varchar(100) DEFAULT NULL ,
client_type varchar(50) DEFAULT NULL ,
update_time datetime DEFAULT NULL ,
PRIMARY KEY (id)
)

登录 sys 租户看下这个 SQL 执行是否正常

SELECT /+READ_CONSISTENCY(WEAK)/ * FROM oceanbase.__all_virtual_proxy_schema WHERE tenant_name = ‘mysql’ AND database_name = ‘ecp_platform_dev’ AND table_name = ‘pf_app_client’ AND tablet_id = 0 ORDER BY role ASC LIMIT 9223372036854775807

不正常,查询超时。

4012 - Timeout, query has reached the maximum query timeout: 10000000(us), maybe you can adjust the session variable ob_query_timeout or query_timeout hint, and try again.
时间: 10.048s

可能是observer的问题,能不能把节点相关的日志发一下

observer.log.zip (2.0 MB)

日志文件有点大

能不能查询下单个slow sql执行后的traceid,然后grep traceid observer.log*|cat,这个日志上传一下

SELECT id FROM pf_demo
耗时: 5.002s

observer.traceId.log (2.5 KB)

我觉得跟这个是同一个原因,只是现像不同而已:
创建表时报错[4722] [HY000]: log stream location leader does not exist - 社区问答- OceanBase社区-分布式数据库

create table table1(id int)
4722 - log stream location leader does not exist
时间: 1000.03s

observer.CreateTable.log (5.2 KB)

YB42C0A80C7B-00060B192CBD383D-0-0
这个traceid总共就这些内容吗

是的,我又做了一次,就这么多。

select * from __all_virtual_election_event_history
查询下这条sql,直连查询

sys租户oceanbase数据库,没有这张表呀。其它库也找了,没有这个表。

SELECT gmt_create,svr_ip,svr_port,event,name3,value3 FROM __all_server_event_history WHERE module=“ELECTION” AND value1=$tenant_id AND value2=1 ORDER BY gmt_create;
查询一下这条sql,租户id替换成你之前执行查询sql的租户id


截取下这个时间段内的

image

在每个server里搜grep ‘pcode.*538[4567]’ ./observer.log,看下是否能搜到日志

这是在日志中找到的内容
a.log (37.5 KB)
b.log (6.0 KB)