42 lines
1.4 KiB
Markdown
42 lines
1.4 KiB
Markdown
关于查询超时设计
|
|
=============================
|
|
|
|
|
|
|
|
OceanBase 租户内部执行查询的工作线程数跟租户的 CPU 个数相关,所以工作线程是很稀有的资源。如果查询长时间不返回,就会一直占用这个工作线程资源。OceanBase 为避免长时间不返回的查询长期占用工作线程资源以及可能占用 CPU 资源,设计了查询超时功能。这个超时时间默认由租户变量 ob_query_timeout 控制,默认值是100000000(单位微秒)。当查询时间超过这个变量值后,会返回错误-4012(HY000): Timeout 。
|
|
|
|
默认的超时参数对于 OLTP 类业务来说是合理的,但是对于 OLAP 类业务就不一定。此时可以选择在会话级别调整租户变量的值,或者使用 SQL Hint 设置超时参数。
|
|
|
|
**示例:设置查询超时**
|
|
|
|
```javascript
|
|
#obclient -h127.1 -uroot@obmysql#obdemo -P3883 -p123456 -c -A
|
|
|
|
obclient> show variables like 'ob_query_timeout';
|
|
+------------------+----------+
|
|
| Variable_name | Value |
|
|
+------------------+----------+
|
|
| ob_query_timeout | 10000000 |
|
|
+------------------+----------+
|
|
1 row in set (0.01 sec)
|
|
|
|
obclient> set session ob_query_timeout=10000000;
|
|
Query OK, 0 rows affected (0.00 sec)
|
|
|
|
obclient> select sleep(11);
|
|
ERROR 4012 (HY000): Timeout
|
|
obclient>
|
|
obclient> select /*+ query_timeout(100000000) */ sleep(11);
|
|
+-----------+
|
|
| sleep(11) |
|
|
+-----------+
|
|
| 0 |
|
|
+-----------+
|
|
1 row in set (11.00 sec)
|
|
|
|
obclient>
|
|
```
|
|
|
|
|
|
|