logstash-jdbc输入插件在启用准备语句和大数据的情况下不起作用

u0sqgete  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(2)|浏览(409)

我的任务是将数据从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%。
一段时间后,日志存储出现以下错误:java.lang.bootstrapmethoderror:调用站点初始化异常
几句重要的话:
我是否将jdbc\u fetch\u size更改为更小或更大的值并不重要(它只影响内存消耗的速度)
在数据量较小的情况下,一切都可以正常工作—创建elk索引中的文档,但有轻微的延迟,这在禁用prepared语句时不会发生。
当准备好的语句被禁用时,即使有大数据,一切都可以正常工作,没有任何延迟
我已经在7.8.0和7.9.0两个版本上测试过了-结果都一样-不起作用。
我是在对付虫子吗?

0md85ypi

0md85ypi1#

您对jdbc驱动程序类使用什么值?
java::oracle.jdbc.driver.oracledriver(驱动程序本身是oracle:oracle:11.2.0.4-jdk6-sp1)
如果直接对数据库执行查询会发生什么?
它正在工作(很长,因为返回的条目太多),但它没有崩溃,并且语句一直显示(在oracle控制台上检查)。
sql语句从数据库返回多少条记录?
1.93亿张唱片
你试过只从数据库返回一批行吗
是的,对于有限的记录,它可以工作,但这不是我的选择-我需要获取所有记录,而不仅仅是其中的一部分(使用 rownum 不保证)
在这里,准备好的语句的问题是它崩溃了,我并不抱怨持久的导入(我已经准备好了——大量的记录强制执行了它)

31moq8wy

31moq8wy2#

你用什么价值 jdbc_driver_class ?
如果直接对数据库执行查询会发生什么?
sql语句从数据库返回多少条记录?你试过只从数据库返回一批行吗?为此,您可以将sql语句更改为:

select * from (
 SELECT
      ......
      FROM table_name tbl
      JOIN ......
      JOIN ...
      LEFT JOIN ......
      WHERE tbl.id > ?
) where rownum = 100000;

相关问题