elasticsearch logstash-Jdbc输入插件不’;t使用准备好的报表和大数据,elasticsearch,logstash,logstash-jdbc,elasticsearch,Logstash,Logstash Jdbc" /> elasticsearch logstash-Jdbc输入插件不’;t使用准备好的报表和大数据,elasticsearch,logstash,logstash-jdbc,elasticsearch,Logstash,Logstash Jdbc" />

elasticsearch logstash-Jdbc输入插件不’;t使用准备好的报表和大数据

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_

我的任务是将数据从Oracle数据库导入Elasticsearch。 当然,我使用的是JDBC输入插件

由于性能原因,我需要为插件启用准备好的语句。 (它将减少对数据库的读取操作,并将正确使用索引)

我的配置如下所示:

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索引中的文档,但有轻微的延迟,这在禁用准备语句时不会发生
  • 当禁用准备好的语句时,即使使用大数据,一切都可以正常工作,并且没有任何延迟
我已经在7.8.0和7.9.0两个版本上测试了它-两个版本的结果相同-不工作


我在这里处理的是一个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
无法确保)

在这里,预先准备好的语句的问题在于它崩溃了,我并不抱怨长时间的导入(我已经准备好了——大量的记录强制执行了它)