elasticsearch logstash-Jdbc输入插件不’;t使用准备好的报表和大数据
我的任务是将数据从Oracle数据库导入Elasticsearch。 当然,我使用的是JDBC输入插件 由于性能原因,我需要为插件启用准备好的语句。 (它将减少对数据库的读取操作,并将正确使用索引) 我的配置如下所示:
elasticsearch logstash-Jdbc输入插件不’;t使用准备好的报表和大数据,
elasticsearch,logstash,logstash-jdbc,
elasticsearch,Logstash,Logstash Jdbc,我的任务是将数据从Oracle数据库导入Elasticsearch。 当然,我使用的是JDBC输入插件 由于性能原因,我需要为插件启用准备好的语句。 (它将减少对数据库的读取操作,并将正确使用索引) 我的配置如下所示: input { jdbc { jdbc_fetch_size => 999 schedule => "* * * * *" use_prepared_statements => true prepared_
input {
jdbc {
jdbc_fetch_size => 999
schedule => "* * * * *"
use_prepared_statements => true
prepared_statement_name => "foo"
prepared_statement_bind_values => [":sql_last_value"]
statement => " SELECT
......
FROM table_name tbl
JOIN ......
JOIN ...
LEFT JOIN ......
WHERE tbl.id > ?
"
use_column_value => true
tracking_column => "id"
}
}
但我遇到了一个问题。激活后:
- 日志存储中不传输任何事件
- 没有在ELK中创建新文档
- CPU使用率和内存消耗为100%
- 一段时间后,logstash scrash出现以下错误: java.lang.BootstrapMethodError:调用站点初始化异常
- 我是否将jdbc_fetch_size更改为更小或更大的值并不重要(它只影响内存消耗的速度)
- 在数据量较小的情况下,一切都可以正常工作——创建ELK索引中的文档,但有轻微的延迟,这在禁用准备语句时不会发生
- 当禁用准备好的语句时,即使使用大数据,一切都可以正常工作,并且没有任何延迟
我在这里处理的是一个bug吗?您对
jdbc\u driver\u类
使用了什么值
如果直接对数据库执行查询,会发生什么
sql语句从数据库返回多少条记录?
您是否尝试只从数据库返回一批行?为此,您可以将SQL语句更改为:
select * from (
SELECT
......
FROM table_name tbl
JOIN ......
JOIN ...
LEFT JOIN ......
WHERE tbl.id > ?
) where rownum = 100000;
您对jdbc_驱动程序_类使用什么值 Java::oracle.jdbc.driver.OracleDriver (驱动程序本身是oracle:oracle:11.2.0.4-jdk6-sp1) 如果直接对数据库执行查询,会发生什么 它正在工作(很长,因为返回的条目太多),但它没有崩溃,并且不断显示语句(在oracle控制台上检查) sql语句从数据库返回多少条记录 1.93亿张唱片 您是否尝试只从数据库返回一批行 是的,对于有限的记录,它可以工作,但对我来说不是一个选项-我需要获取所有记录,而不仅仅是其中的一部分(使用
rownum
无法确保)
在这里,预先准备好的语句的问题在于它崩溃了,我并不抱怨长时间的导入(我已经准备好了——大量的记录强制执行了它)