调优经验

<< Click to Display Table of Contents >>

当前位置:  VooltDB数据集市 > 集市常见问题 

调优经验

复制链接

1. 如何处理查询时内存超出限制?

当执行集市查询,出现如下 VooltDB 内存不足报错时:Exception: Memory limit (for query) exceeded

Related Query: 'visits_v120220311174506-833' Run user: 'admin'

Caused by: java.sql.SQLException 执行SQL失败:“VooltDB exception, code: 241, host: 192.168.1.130, port: 8523; DB::Exception: Memory limit (for query) exceeded: would use 154.66 MiB (attempt to allocate chunk of 4207121 bytes), maximum: 151.63 MiB: (while reading column StartURL): (while reading from part /opt/lisa/10.0/v1/vooltdb-server-0/lib/vooltdb/store/556/556b8016-9e1a-4c90-826d-2235ec63e69f/201403_10_10_0/ from mark 0 with max_rows_to_read = 6747): While executing MergeTree (version 21.3.5.42)(in query:SELECT "CounterID" AS "CounterID", "StartDate" AS "StartDate", "Sign" AS "Sign", "IsNew" AS "IsNew", "VisitID" AS "VisitID" , "UserID" AS "UserID", "StartTime" AS "StartTime", "Duration" AS "Duration", "UTCStartTime" AS "UTCStartTime" FROM default.visits_v1 order by CounterID ) "SUB_QRY" LIMIT 200 FORMAT TabSeparatedWithNamesAndTypes;).Check the value of configuration item:max_memory_usage, max_bytes_before_external_group_by,max_bytes_before_external_sort.

在报错信息最后看到提示了需要调整哪些配置参数,我们可以进入【VooltDB管理】->【节点管理】,编辑所有 VooltDB 节点,将提示信息中对应的参数值调整为当前值的一半。

MemoryConfig

2. 如何处理查询报并发超限?

当执行并发集市查询,出现如下报错时:Exception: Too much simultaneous queries. Maximum: 100

此报错说明 VooltDB 中同时执行的查询太多了,超过了数据库的最大并发限制。查询并发限制是和license绑定的,并发数为license cloud cpu核数 * 4,可以重新申请license调整cloud cpu核数解决。

3. 如何查询耗费高的CPU、内存?

进入【管理系统】->【监控预警】->【系统监控】,打开集市信息文件夹下的节点查询监控报表,可以看到TOP N个查询的内存和cpu消耗情况。具体释义可以参考【管理系统】->【监控预警】->【系统监控】->【集市信息】->【节点查询监控】章节。

NodeQueryAudit

NodeQueryAudit1

4. 如何处理distributed_ddl_task_timeout超时问题

当入集市、删除集市文件或删除集市文件夹,出现如下报错时:

VooltDB exception, code: 159, host: MPP30, port: 8223; DB::Exception: Watching task /vooltdb/task_queue/ddl/query-0000000006 is executing longer than vooltdb.distribute.task.timeout (=180) seconds. There are 2 unfinished hosts (0 of them are currently active), they are going to execute the query in background (version 21.3.5.42)

可以在bi.properties中配置如下参数:vooltdb.distribute.task.timeout=×,单位为秒,默认180s。

5. 句柄占用,too many open files 错误

当执行集市查询时,出现如下too many open files错误,一般是因为 VooltDB 查询过程中要打开大量的文件,这时候需要占用大量句柄所致。

OpenFilesLimit

一般这种时候需要先看 ulimit -a 中的 open files 句柄数配置是否太小,一般1024就差不多,如果还是不行,那么就可能是瞬间到达 VooltDB 的最大压力过大。

OpenFileLimit1

VooltDB对于不同的sql,查询性能的波动比较厉害,单位时间内能够同时处理的query是有限度的,超过这个限度,则会造成堆积,内存不足、大量占用file句柄等性能问题。

可以从以下几个方面排查:

1)对于VooltDB,首先从query数量max_concurrent_queries这个参数看,这个配置参数在config.xml中,受到license核数的影响,会动态变化,同时执行query的数量不会超过这个配置值,如果超过,则报max_concurrent_queries错误。

2)配置参数max_threads,这个配置参数在vooltdb.xml中,等于license核数,为VooltDB的最大进程数。

3)单位时间内,VooltDB能够支持的query数量,统计出了一个粗略的计算方法(如下)。如果超过这个值,则会造成压力过大,资源堆积,比如句柄占用,内存不足。这个计算值对单独的固定的sql效果较好,对于复杂的场景,非常多的sql混合执行,就不那么准确了。

假设单位时间为T,单个sql的执行时间为m,核数为C,单位时间内可以执行的sql数量为N,

则N=T/m*C。

假如在1秒,进入了多个执行时间为200ms的sql,VooltDB节点为10核,那么能够处理的query数量为:

(1000/200)*10=50,即约等于在1秒内,进入50个query查询是基本能够处理的。

4)修改系统配置,在配置文件/etc/security/limits.conf中添加项:
* hard nofile 65536
* soft nofile 65536