elasticsearch 在大型数据集上通过Logstash加载Elasticsearch运行非常缓慢,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 在大型数据集上通过Logstash加载Elasticsearch运行非常缓慢,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 在大型数据集上通过Logstash加载Elasticsearch运行非常缓慢

elasticsearch 在大型数据集上通过Logstash加载Elasticsearch运行非常缓慢,elasticsearch,logstash,elasticsearch,Logstash,我在MySql中有一个大约220万行的大数据集,我通过Logstash导入Elasticsearch的工作正常,但现在进展非常缓慢 在我的本地机器上,每台机器都有4GB内存,运行速度相对较快,需要3天,而服务器到服务器的传输估计需要80多天 使用子查询等,查询相当复杂 我将mysql服务器从使用/tmp目录切换到使用/data/tmp_mysqldirectory,但即使这样,我偶尔也会耗尽临时空间。当我切换到/data/tmp_mysql目录来保存/tmp文件而不是/tmp目录时 e、 g:我

我在MySql中有一个大约220万行的大数据集,我通过Logstash导入Elasticsearch的工作正常,但现在进展非常缓慢

在我的本地机器上,每台机器都有4GB内存,运行速度相对较快,需要3天,而服务器到服务器的传输估计需要80多天

使用子查询等,查询相当复杂

我将mysql服务器从使用/tmp目录切换到使用/data/tmp_mysqldirectory,但即使这样,我偶尔也会耗尽临时空间。当我切换到/data/tmp_mysql目录来保存/tmp文件而不是/tmp目录时

e、 g:我得到了一个错误:

message=>执行JDBC查询时出现异常, 异常续集::数据库错误:Java::JavaSql::SQLException 写入文件'/data/tmp_mysql/MYHPf8X5'时出错错误代码:28

我更新了我的查询,将此限制设置为200: 更新p_结果集computed_at=0000-00-00:00:00,其中computed_at为空限制200

我的配置文件如下所示:请注意,我正在使用页面大小为10000的分页

    input {
    jdbc {
        jdbc_connection_string => "jdbc:mysql://xxx.xxx.xxx.xxx:3306/xxx_production"
        jdbc_user => "xxx"
        jdbc_password => "xxx"
        jdbc_driver_library => "/usr/share/java/mysql.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        statement_filepath => "./sql/req.sql"
        jdbc_paging_enabled => "true"
        jdbc_page_size => 10000
    }
}
    output {
        elasticsearch {
            index => "xxx_resultats_preprod2"
            document_type => "resultats"
            hosts => ["localhost:9200"]
            codec => "plain"
            template => "./resultats_template.json"
            template_name => "xxx_resultats"
            template_overwrite => true
            document_id => "%{result_id}"
        }
    }
我已经看了一些文档

在我的logstash/elasticsearch服务器上运行free-m时,我看到:

成员:3951250714440148724

-/+缓冲区/高速缓存:16342316

掉期:40931733920

因此,总RAM=4GB,使用2.5GB或63.4%。所以Elasticsearch服务器上的Ram似乎不是问题所在

在我的MySql服务器上运行free-m时,我看到:

成员:39513836115021154

-/+缓存:26791271

掉期:40938133280

因此,总Ram=4GB,使用~3,8GB或97%。这看起来是个问题

我的理论是,我偶尔会切换到磁盘,这也是磁盘速度慢的部分原因。或者我同时使用了分页和限制,这会减慢速度

Mysql服务器上的平均负载目前相对较低

top
平均负荷:1,00,1,00,1,00

在/数据下,我看到:

sudo du -h -d 1
13G./tmp_mysql

4,5G/生产

使用df-h,我看到: 总使用利用率% /dev/sdb1 32G 6,2G 24G 21%/数据

如果有人能帮助我更快地执行查询,我将非常感激

编辑: 谢谢大家的宝贵反馈。原来我的logstash导入已经崩溃,因为Mysql中子查询的/tmp空间不足,我假设我可以继续运行相同的导入作业。嗯,我可以运行它,它加载到弹性,但非常非常缓慢。当我重新实现索引的加载,并开始在一个新的索引上运行它时,加载时间就变得和过去一样了。我估计加载数据需要55个小时——这是一段很长的时间,但至少它现在工作正常


我对Mysql子查询进行了解释,发现了一些可以解决/改进的索引问题。

您在这里指出了两个潜在问题:

慢速mysql读取 慢速弹性搜索写入 你必须消灭一个!尝试在标准输出上输出,看看elasticsearch是否是瓶颈

如果是,您可以使用一些ES设置来改善摄入:

刷新\u间隔=>-1禁用刷新 在导入\u个复制副本时删除复制副本:0 使用更多的碎片和节点
更多信息参见

我正在跟踪logstash日志,它的运行速度非常慢,以至于我无法获得任何输出,即使一次只运行200行。我试试你的建议。具有刷新间隔等功能。谢谢!我不确定更多的节点会加快速度,除非你正在谈论添加带有ES节点的物理机器。当然是的!elasticsearch水平伸缩性非常好,这是最大的优势。最好的配置是每个节点有1个碎片,以便快速索引。
top
sudo du -h -d 1