iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >技术分享 | InnoDB Cluster 如何高效加载数据
  • 399
分享到

技术分享 | InnoDB Cluster 如何高效加载数据

技术分享|InnoDBCluster如何高效加载数据 2015-07-06 04:07:44 399人浏览 无得
摘要

一行命令搞定 InnoDB Cluster 数据快速加载。 InnoDB Cluster 8.0 经过一系列的优化已足够稳定,早期版本常因网络延迟、闪断等问题造成集群不稳定,也曾遇到客户因网络缓解问题导致节点频繁被踢,可用性得不到保障,

技术分享 | InnoDB Cluster 如何高效加载数据


一行命令搞定 InnoDB Cluster 数据快速加载。

InnoDB Cluster 8.0 经过一系列的优化已足够稳定,早期版本常因网络延迟、闪断等问题造成集群不稳定,也曾遇到客户因网络缓解问题导致节点频繁被踢,可用性得不到保障,不得不使用外围运维手段保障集群稳定性,也增加了运维工作的复杂性。现在通过参数优化已能得到有效解决,能够容忍一定网络波动。解决了网络问题,另一个使用 InnoDB Cluster 面临问题就是大事务了,系统难免会遇到大的 DML,load data 操作。在数据同步机制上 group replication 与 async replication、semi-sync replication 有很大差异。它是参考 paxos 协议实现了独立的组通讯引擎 xcom 集成在 Mysql,xcom 负责节点间消息的发送与接收,并保证消息投递的一致和有序,消息包括两类事务写集相关信息和心跳统计相关信息。xcom 是单线程实例,在处理大事务必然会影响其他消息的处理,如果是来自其他节点的心跳消息无法回应,5s 无响应节点会被踢出集群。group_replication_transaction_size_limit 参数限制了事务大小,超出限制事务回滚不会广播。事务消息就是 writeset,其大小是由事务变更行数、行长度、唯一索引数量等因素决定。为了增强对大事务的处理能力,8.0.16 支持了消息分片机制,通过 group_replication_communication_max_message_size 参数控制消息分片大小,若消息超过该限制会自动分包广播,到达其他节点后自动合并起来,此参数不能大于 slave_max_allowed_packet 值,默认是 10MB,最大上限 1GB。

那有了消息分片机制是不是就完美支持大事务了?

我模拟了 load data 导入一个 185MB 的文件。在 group_replication_transaction_size_limit 默认 147MB 配置下是无法导入的,超过限制事务被回滚。

将 group_replication_transaction_size_limit 设置为 0 相当于取消限制,可以成功导入,且集群节点状态全部正常,没有节点被踢出集群。

还能处理更大的事务吗?

随后测试中我将数据文件放大到 1G,group_replication_transaction_size_limit 保持为 0 不做事务限制,会发生节点失联导入失败。因为超出了 xcom cache 限制,xcom cache 缓存了最近一段时间的消息信息,当节点失联后加回集群,失联期间的消息要通过 xcom cache 来恢复,如果缓存空间不够,缺失的消息被淘汰了,节点就无法自动加回集群,只能手动加回集群通过异步复制通道恢复数据。8.0.16 之前 xcom cache 是固定配置 50000 个 slot 或 1G 内存,超出限制按 LRU 策略回收内存空间,8.0.16 新增了 group_replication_message_cache_size 参数取消了固定限制,用户可以结合实际情况调整,配合 group_replication_member_expel_timeout 调整能容忍更长网络延迟。xcom cache 使用情况在 memory_summary_global_by_event_name 观测

mysql> select * from  memory_summary_global_by_event_name where event_name like "memory/group_rpl%"G
*************************** 1. row ***************************
EVENT_NAME: memory/group_rpl/GCS_XCom::xcom_cache
COUNT_ALLOC: 2362
COUNT_FREE: 2317
SUM_NUMBER_OF_BYTES_ALLOC: 5687428055
SUM_NUMBER_OF_BYTES_FREE: 3196560772
LOW_COUNT_USED: 0
CURRENT_COUNT_USED: 45
HIGH_COUNT_USED: 1176
LOW_NUMBER_OF_BYTES_USED: 0
CURRENT_NUMBER_OF_BYTES_USED: 2490867283
HIGH_NUMBER_OF_BYTES_USED: 3195280758
1 row in set (0.0030 sec)
  • CURRENT_COUNT_USED  xcom cache 当前已使用 slot 数量

  • CURRENT_NUMBER_OF_BYTES_USED  xcom cache 当前已使用内存空间

如果将 xcom cache 设置足够大,能处理更大的事务吗?

group_replication_message_cache_size 上限是 16EB,cb_xcom_receive_data 函数接收消息的限制是 4G,有兴趣可以试验下加载一个 5G 数据文件会是什么情况。但大事务对内存和网络的开销,会影响集群整体性能,还是应尽量避免大事务。

了解了组复制对大事务的处理方式,如何快速的导入数据?

正确做法是拆分成小文件并行导入,mysql shell Adminapi 早已集成了并行导入小工具,自动拆分并行处理,效率更高,开箱即用。

mysqlsh root@localhost:4000 --ssl-mode=DISABLED -- util import-table /Users/hongbin/mysql-sandboxes/4000/mysql-files/sbtest --schema=test --table=sbtest2 --bytes-per-chunk=10M

总结

  1. 消息分片机制能在一定程度降低大事务造成节点被踢出集群的概率,但集群性能依然会受影响。
  2. 大事务需要占用更多 xcom cache 空间,xcom 要申请更多内存空间,也会有被 OOM 的风险。
  3. 应尽量避免大事务,调整 group_replication_transaction_size_limit、group_replication_message_cache_size、group_replication_communication_max_message_size、group_replication_member_expel_timeout 参数只能缓解部分问题。生产环境也不建议设置 group_replication_transaction_size_limit 为 0。
  4. 大文件数据加载应拆分后导入,推荐使用 mysql shell 的util.importTable。
您可能感兴趣的文档:

--结束END--

本文标题: 技术分享 | InnoDB Cluster 如何高效加载数据

本文链接: https://www.lsjlt.com/news/4904.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 技术分享 | InnoDB Cluster 如何高效加载数据
    一行命令搞定 InnoDB Cluster 数据快速加载。 InnoDB Cluster 8.0 经过一系列的优化已足够稳定,早期版本常因网络延迟、闪断等问题造成集群不稳定,也曾遇到客户因网络缓解问题导致节点频繁被踢,可用性得不到保障,...
    99+
    2015-07-06
    技术分享 | InnoDB Cluster 如何高效加载数据
  • 技术分享 | MySQL 数据库如何改名?
    作者:杨涛涛 资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MyS...
    99+
    2020-04-24
    技术分享 | MySQL 数据库如何改名?
  • Python IDE中的二维码技术,让大数据分析更加高效?
    在现代社会,大数据分析已经成为了各个领域的重要工具。Python作为一门高级语言,应用广泛,它在数据分析领域也是非常受欢迎的。Python IDE是Python的一种集成开发环境,它为Python编程提供了便利的工具和环境。在Python...
    99+
    2023-09-26
    ide 二维码 大数据
  • Java中如何高效地加载大数据数组?
    在Java编程中,经常会遇到需要加载大量数据的情况,比如读取文件、处理图像、解析大型数据集等。在这些场景下,如果不采取有效的方法,就会遇到内存不足、运行速度慢等问题。因此,本文将介绍Java中如何高效地加载大数据数组。 使用缓存 在J...
    99+
    2023-06-26
    load 大数据 数组
  • Python中如何加载大数据?学习笔记分享!
    Python是一门功能强大的编程语言,广泛应用于各个领域。但是,在处理大数据时,Python的速度和效率可能不如其他语言。因此,如何加载大数据成为了Python程序员必须面对的问题。 在本文中,我将与大家分享如何在Python中加载大数据,...
    99+
    2023-09-17
    load 学习笔记 大数据
  • Java数组处理:如何高效地加载大量数据?
    在Java编程中,处理大量数据是一个常见的需求。然而,对于大型数据集,加载数据可能会变得非常耗时,这对程序的性能和响应时间产生负面影响。那么,如何在Java中高效地加载大量数据呢?本文将介绍一些有效的方法和技巧。 使用缓冲区 Java...
    99+
    2023-06-26
    load 大数据 数组
  • 如何在Java中高效地加载大数据对象?
    Java作为一种广泛使用的编程语言,经常需要处理大量的数据对象,如何在Java中高效地加载大数据对象是一个非常重要的问题。本文将介绍一些在Java中高效加载大数据对象的方法,并提供一些示例代码。 一、使用Java序列化 Java序列化是一种...
    99+
    2023-08-16
    大数据 对象 load
  • Python 重定向技巧:如何有效地加载大数据?
    在日常的数据处理中,我们常常需要加载大数据集。但是,当数据集过大时,很容易导致程序内存溢出,从而无法正常加载数据。为了解决这个问题,我们需要掌握一些 Python 重定向技巧,以便能够更加高效地加载大数据集。 使用生成器 生成器是一种...
    99+
    2023-10-18
    大数据 重定向 load
  • 如何利用自然语言处理技术提高大数据分析效率?
    自然语言处理技术(Natural Language Processing,简称NLP)是人工智能领域中的一个重要分支,它可以帮助计算机理解和处理人类语言。在大数据时代,数据量的爆炸式增长给数据分析带来了巨大的挑战,而NLP技术可以有效地提高...
    99+
    2023-08-20
    大数据 自然语言处理 http
  • Python 和 Django 开发技术:如何高效地存储数据?
    Python 和 Django 是当前最流行的 Web 开发技术,它们被广泛应用于各种领域。在 Web 应用程序中,存储数据是必不可少的。因此,如何高效地存储数据是开发人员需要考虑的重要问题。在本文中,我们将介绍一些 Python 和 D...
    99+
    2023-06-19
    django 开发技术 存储
  • Python文件索引和加载技术:如何提高程序的性能和效率?
    Python是一种高效、灵活、易于学习和使用的编程语言,因此它已经成为了许多开发人员的首选。但是,当我们处理大型Python项目时,我们可能会面临一些性能和效率上的挑战。在这篇文章中,我们将探讨Python文件索引和加载技术,这些技术可以帮...
    99+
    2023-09-28
    文件 索引 load
  • GO 语言接口如何实现大数据的高效加载?
    随着互联网技术的不断发展和数据规模的不断增大,大数据的处理和分析已经成为了现代技术领域中的一个热门话题。作为一种高效且易于学习的编程语言,GO 语言在处理大数据方面也有着独特的优势。本文将介绍 GO 语言接口如何实现大数据的高效加载。 一...
    99+
    2023-06-17
    接口 load 大数据
  • 如何在 GO 语言中高效地加载大数据接口?
    GO 语言作为一种高效、高并发的编程语言,越来越受到开发者的喜爱。然而,在处理大量数据时,GO 语言的效率也会受到影响。本文将介绍如何在 GO 语言中高效地加载大数据接口,以提高代码的运行效率。 一、使用缓存 在加载大量数据时,经常需要从外...
    99+
    2023-06-17
    接口 load 大数据
  • PHP如何在Windows系统下高效地加载大数据量?
    PHP作为一种常用的开发语言,经常需要处理大量的数据。在Windows系统下,如何高效地加载大数据量是一个值得探讨的问题。下面将介绍几种提高PHP在Windows系统下加载大数据量效率的方法。 一、使用扩展 PHP提供了一些扩展,如APC、...
    99+
    2023-09-29
    load 大数据 windows
  • PHP 容器技术:响应大数据时如何提高效率?
    PHP 是一种非常流行的编程语言,尤其在 Web 开发中广泛应用。然而,当处理大量数据时,PHP 的效率可能会变得很低下。这时,容器技术可以为 PHP 应用程序提供一些有用的解决方案,以提高其效率和可靠性。 容器技术是一种轻量级的虚拟化技...
    99+
    2023-06-15
    容器 响应 大数据
  • Go 语言异步编程:如何实现高效的数据加载?
    随着互联网技术的发展,数据处理已经成为了一个重要的话题。在实际开发中,我们经常需要从外部系统或数据库中获取数据,并将其加载到我们的应用程序中。在这种情况下,异步编程成为了一种非常重要的方式,它可以提高我们的应用程序的性能和响应速度。本文将...
    99+
    2023-09-26
    数组 load 异步编程
  • 分布式数组:在Go语言中如何实现高效的数据共享?
    在分布式计算中,数据共享是非常重要的一个方面。而分布式数组正是一种实现高效数据共享的方式。在本文中,我们将探讨在Go语言中如何实现分布式数组,并且演示一些示例代码。 什么是分布式数组? 分布式数组是由多个计算节点组成的数组,每个节点都可以...
    99+
    2023-11-08
    分布式 数据类型 数组
  • Python文件开发技术:如何在数据类型中提高效率?
    Python是一种高级编程语言,常用于数据分析、人工智能、Web开发等领域。在Python中,数据类型是至关重要的。数据类型的选择不仅会影响程序的运行效率,还会对程序的正确性产生重要影响。在本文中,我们将介绍如何在数据类型中提高效率,以便更...
    99+
    2023-09-17
    文件 开发技术 数据类型
  • PHP开发技术如何提高大数据对象处理的效率?
    PHP作为一种开源的编程语言,广泛应用于Web开发领域。在大数据对象处理方面,PHP的效率一直是开发者们关注的焦点。本文将介绍一些PHP开发技术,以提高大数据对象处理的效率。 一、使用合适的数据结构 在PHP中,数组(Array)是最常用的...
    99+
    2023-10-21
    大数据 对象 开发技术
  • 在 Python 中,如何使用容器函数 load 实现数据的高效加载?
    在 Python 中,数据的高效加载一直是一个备受关注的问题。容器函数 load 是一个非常强大的工具,可以帮助我们快速、高效地加载数据。本文将介绍在 Python 中如何使用容器函数 load 实现数据的高效加载。 一、什么是容器函数 l...
    99+
    2023-10-02
    容器 函数 load
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作