首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDB蜘蛛引擎内存不足

MariaDB蜘蛛引擎内存不足
EN

Database Administration用户
提问于 2015-07-21 20:40:09
回答 1查看 774关注 0票数 4

我有几乎标准的MariaDB和InnoDB引擎工作良好,但我想测试蜘蛛引擎+切分/分区。我有一个查询,它在MariaDB InnoDB上传递罚款15-20分钟。有了蜘蛛引擎,不管我做了什么,它总是从记忆中消失。与蜘蛛引擎的设置是,我有一个蜘蛛引擎与两个后端与适当的分区在这两个。

在哪里我错了。我应该在配置中更改什么。

代码语言:javascript
复制
MariaDB [(none)]> show variables like '%spider%';
+---------------------------------------+-----------+
| Variable_name                         | Value     |
+---------------------------------------+-----------+
| spider_auto_increment_mode            | -1        |
| spider_bgs_first_read                 | -1        |
| spider_bgs_mode                       | 3         |
| spider_bgs_second_read                | -1        |
| spider_bka_engine                     |           |
| spider_bka_mode                       | 1         |
| spider_bka_table_name_type            | -1        |
| spider_block_size                     | 16384     |
| spider_bulk_size                      | -1        |
| spider_bulk_update_mode               | -1        |
| spider_bulk_update_size               | 128000000 |
| spider_casual_read                    | -1        |
| spider_conn_recycle_mode              | 1         |
| spider_conn_recycle_strict            | 0         |
| spider_connect_mutex                  | OFF       |
| spider_connect_retry_count            | 1000      |
| spider_connect_retry_interval         | 1000      |
| spider_connect_timeout                | 28000     |
| spider_crd_bg_mode                    | -1        |
| spider_crd_interval                   | -1        |
| spider_crd_mode                       | -1        |
| spider_crd_sync                       | -1        |
| spider_crd_type                       | -1        |
| spider_crd_weight                     | -1        |
| spider_delete_all_rows_type           | -1        |
| spider_direct_dup_insert              | -1        |
| spider_direct_order_limit             | 1         |
| spider_dry_access                     | OFF       |
| spider_error_read_mode                | -1        |
| spider_error_write_mode               | -1        |
| spider_first_read                     | -1        |
| spider_force_commit                   | 1         |
| spider_general_log                    | OFF       |
| spider_init_sql_alloc_size            | -1        |
| spider_internal_limit                 | -1        |
| spider_internal_offset                | -1        |
| spider_internal_optimize              | -1        |
| spider_internal_optimize_local        | -1        |
| spider_internal_sql_log_off           | OFF       |
| spider_internal_unlock                | OFF       |
| spider_internal_xa                    | OFF       |
| spider_internal_xa_id_type            | 0         |
| spider_internal_xa_snapshot           | 0         |
| spider_local_lock_table               | OFF       |
| spider_lock_exchange                  | OFF       |
| spider_log_result_error_with_sql      | 0         |
| spider_log_result_errors              | 0         |
| spider_low_mem_read                   | 1         |
| spider_max_order                      | 32767     |
| spider_multi_split_read               | 1         |
| spider_net_read_timeout               | 28000     |
| spider_net_write_timeout              | -1        |
| spider_ping_interval_at_trx_start     | 3600      |
| spider_quick_mode                     | 3         |
| spider_quick_page_size                | 8096      |
| spider_read_only_mode                 | -1        |
| spider_remote_access_charset          |           |
| spider_remote_autocommit              | 1         |
| spider_remote_default_database        |           |
| spider_remote_sql_log_off             | 0         |
| spider_remote_time_zone               |           |
| spider_remote_trx_isolation           | -1        |
| spider_reset_sql_alloc                | -1        |
| spider_same_server_link               | OFF       |
| spider_second_read                    | -1        |
| spider_select_column_mode             | -1        |
| spider_selupd_lock_mode               | -1        |
| spider_semi_split_read                | 8         |
| spider_semi_split_read_limit          | 8         |
| spider_semi_table_lock                | 1         |
| spider_semi_table_lock_connection     | -1        |
| spider_semi_trx                       | ON        |
| spider_semi_trx_isolation             | -1        |
| spider_skip_default_condition         | -1        |
| spider_split_read                     | -1        |
| spider_sts_bg_mode                    | -1        |
| spider_sts_interval                   | -1        |
| spider_sts_mode                       | -1        |
| spider_sts_sync                       | -1        |
| spider_support_xa                     | ON        |
| spider_sync_autocommit                | ON        |
| spider_sync_time_zone                 | OFF       |
| spider_sync_trx_isolation             | ON        |
| spider_table_init_error_interval      | 1         |
| spider_udf_ct_bulk_insert_interval    | -1        |
| spider_udf_ct_bulk_insert_rows        | -1        |
| spider_udf_ds_bulk_insert_rows        | -1        |
| spider_udf_ds_table_loop_mode         | -1        |
| spider_udf_ds_use_real_table          | -1        |
| spider_udf_table_lock_mutex_count     | 20        |
| spider_udf_table_mon_mutex_count      | 20        |
| spider_use_all_conns_snapshot         | OFF       |
| spider_use_consistent_snapshot        | OFF       |
| spider_use_default_database           | ON        |
| spider_use_flash_logs                 | OFF       |
| spider_use_handler                    | -1        |
| spider_use_pushdown_udf               | -1        |
| spider_use_snapshot_with_flush_tables | 0         |
| spider_use_table_charset              | -1        |
| spider_version                        | 3.2.21    |
+---------------------------------------+-----------+
EN

回答 1

Database Administration用户

发布于 2015-07-21 22:10:51

免责声明:不是蜘蛛存储引擎专家

我不认为这个问题完全是问题所在。它不是作为一个整体的蜘蛛存储引擎(SSE)。您应该关注SSE的一个特定方面:到每个碎片的DB连接。

考虑一下DB连接如何分配内存。

下面是与单个DB连接相关联的缓冲区:

  • 加入_缓冲器_大小
  • 排序_缓冲器_大小
  • 朗读_缓冲器_大小
  • 朗读_rnd_缓冲器_大小
  • tmp_表格_大小 / 最大值_堆_表格_大小
  • net_缓冲器_长度 / 最大值_允许的_封包
  • 线程_堆栈

鉴于SSE必须保持到两个碎片的开放连接,请想象正在发生的情况:

  • 从第一个碎片读取的数据
  • DB连接在排序缓冲区中保存了一些内存。
  • 从第二个碎片读取的数据
  • DB连接在排序缓冲区中保存了一些内存。

当这两个连接都保存它的数据份额时,正在进行聚合。

以下是我过去关于DB连接的内存消耗的文章

至于查询,您将生成一个完整的结果,然后从1,000万行中提取。很可能,在查询完成之前,来自两个DB连接的内存不会被释放。

为什么对数据的InnoDB版本的查询可以工作呢?最有可能的是,生成的任何临时表最终都会被写入磁盘以继续处理整个结果集,所有这些都是在一个DB连接中完成的。

您可能需要降低一些缓冲区大小,才能使DB连接转到磁盘或使RAM的数量翻两番。请花点时间对它们进行调整。

还有一件事:根据视图进行聚合肯定会创建大型临时表。尝试重构查询以检索更少的行,即使在InnoDB的情况下也是如此。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/107683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档