`
ssydxa219
  • 浏览: 622468 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

MySQL 插入速度调高至 10000条/秒

 
阅读更多
(1)提高数据库插入性能中心思路:尽量将数据一次性写入到Data File和减少数据库的checkpoint 操作。这次修改了下面四个配置项:
          1)将 innodb_flush_log_at_trx_commit 配置设定为0;按过往经验设定为0,插入速度会有很大提高。

                   0: Write the log buffer to the log file and flush the log file every second, but do nothing at transaction commit.
                   1:the log buffer is written out to the log file at each transaction commit and the flush to disk operation is performed on the log file
                   2:the log buffer is written out to the file at each commit, but the flush to disk operation is not performed on it
           2)将 innodb_autoextend_increment 配置由于默认8M 调整到 128M

                此配置项作用主要是当tablespace 空间已经满了后,需要MySQL系统需要自动扩展多少空间,每次tablespace 扩展都会让各个SQL 处于等待状态。增加自动扩展Size可以减少tablespace自动扩展次数。

           3)将 innodb_log_buffer_size 配置由于默认1M 调整到 16M

                此配置项作用设定innodb 数据库引擎写日志缓存区;将此缓存段增大可以减少数据库写数据文件次数。

          4)将 innodb_log_file_size 配置由于默认 8M 调整到 128M

                此配置项作用设定innodb 数据库引擎UNDO日志的大小;从而减少数据库checkpoint操作。
          5) bulk_insert_buffer_size=256M
             set session BULK_INSERT_BUFFER_SIZE=256217728;
                经过以上调整,系统插入速度由于原来10分钟几万条提升至1秒1W左右;注:以上参数调整,需要根据不同机器来进行实际调整。特别是 innodb_flush_log_at_trx_commit、innodb_log_buffer_size和 innodb_log_file_size 需要谨慎调整;因为涉及MySQL本身的容灾处理。

(2)提升数据库读取速度,重数据库层面上读取速度提升主要由于几点:简化SQL、加索引和分区; 经过检查程序SQL已经是最简单,查询条件上已经增加索引。我们只能用武器:表分区。
数据库 MySQL分区前准备:在MySQL中,表空间就是存储数据和索引的数据文件。
将S11数据库由于同享tablespace 修改为支持多个tablespace;

将wb_user_info_sina 和 wb_user_info_tx 两个表修改为各自独立表空间;(Sina:1700W数据,2.6G 大数据文件,Tencent 1400W,2.3G大数据文件);
分区操作:
将现有的主键和索引先删除
重现建立id,uid 的联合主键
再以 uid 为键值进行分区。这时候到/var/data/mysql 查看数据文件,可以看到两个大表各自独立表空间已经分割成若干个较少独立分区空间。(这时候若以uid 为检索条件进行查询,并不提升速度;因为键值只是安排数据存储的分区并不会建立分区索引。我非常郁闷这点比Oracle 差得不是一点半点。)
再以 uid 字段上进行建立索引。再次到/var/data/mysql 文件夹查看数据文件,非常郁闷地发现各个分区Size竟然大了。MySQL还是老样子将索引与数据存储在同一个tablespace里面。若能index 与 数据分离能够更加好管理。

经过以上调整,暂时没能体现出系统读取速度提升;基本都是在 2~3秒完成5K数据更新。

MySQL 插入速度调高至 10000条/秒
提高数据库插入性能中心思路:
1、尽量使数据库一次性写入Data File
2、减少数据库的checkpoint 操作
3、程序上尽量缓冲数据,进行批量式插入与提交
4、减少系统的IO冲突

根据以上四点内容,作为一个业余DBA对MySQL服务进行了下面调整:
修改负责收录记录MySQL服务器配置,提升MySQL整体写速度;具体为下面三个数据库变量值:innodb_autoextend_increment、innodb_log_buffer_size、innodb_log_file_size;此三个变量默认值分别为 5M、8M、8M,根据服务器内存大小与具体使用情况,将此三只分别修改为:128M、16M、128M。同时,也将原来2个 Log File 变更为 8 个Log File。此次修改主要满足第一和第二点,如:增加innodb_autoextend_increment就是为了避免由于频繁自动扩展Data File而导致 MySQL 的checkpoint 操作;
将大表转变为独立表空并且进行分区,然后将不同分区下挂在多个不同硬盘阵列中。

完成了以上修改操作后;我看到下面幸福结果:

获取测试结果:
Query OK, 2500000 rows affected (4 min 4.85 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (4 min 58.89 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (5 min 25.91 sec)
Records: 2500000 Duplicates: 0 Warnings: 0
Query OK, 2500000 rows affected (5 min 22.32 sec)

Records: 2500000 Duplicates: 0 Warnings: 0
最后表的数据量:
+------------+
| count(*) |
+------------+
| 10000000|
+------------+


分享到:
评论

相关推荐

    mysql 学习用例(console程序)

    作为初学者,了解并掌握MySQL对于数据库管理至关重要。以下是对MySQL的一些核心概念和常见操作的详细说明: 1. **安装与配置**: - MySQL的安装过程相对简单,通常包括下载安装包、运行安装程序、设置用户名和密码...

    mysql数据库my.cnf配置文件

    也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果 read_buffer_size = 4194304 # MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存...

    SpringBoot使用mybatis批量新增500万数据到mysql数据库Demo

    在本项目中,我们主要探讨的是如何利用SpringBoot集成Mybatis框架进行大数据量(例如500万条)的批量插入操作,并将其高效地存入MySQL数据库。这个Demo旨在提供一个学习实例,帮助开发者理解并优化大数据处理的性能...

    C++三层架构使用ADO访问MySQL操作GTK

    在本文中,我们将深入探讨如何使用C++编程语言构建一个基于三层架构的系统,并通过ADO(ActiveX Data Objects)访问MySQL数据库,同时结合GTK库创建用户界面。首先,让我们逐个解析这些关键概念。 **C++**:C++是一...

    mysql-connector-java-5.1.6-bin.rar

    在描述中提到的“编译器连接mysql数据库”,实际上指的是开发过程中,开发者可以通过这个驱动程序在Java编程环境中(如Eclipse、IntelliJ IDEA等)连接到MySQL数据库,进行数据查询、更新、插入和删除等操作。...

    InnoDB性能调节提示

    MySQL的InnoDB存储引擎在处理大量数据和高并发事务时,其性能调优至关重要。以下是一些关于如何配置和优化InnoDB性能的关键提示: 1. **监控InnoDB状态**: 使用`SHOW INNODB STATUS`命令可以查看InnoDB引擎的状态...

    mysql--linux--5.6

    此外,MySQL 5.6引入了并行复制功能,允许从节点并行应用主节点的二进制日志,进一步加快复制速度。 在并发处理方面,MySQL 5.6增强了线程池管理,降低了上下文切换的开销,使得在高并发场景下系统性能得到改善。新...

    调用天气接口存入数据库---mysql

    使用编程语言的数据库驱动(如Python的pymysql或MySQL Connector/Python),我们可以建立数据库连接,执行INSERT语句将天气信息插入到表中。例如: ```python import pymysql # 建立数据库连接 conn = pymysql....

    笑话爬虫 将笑话存储到文件和MySQL

    5. **性能优化**: 可以使用索引、批量插入等方式提高数据入库速度。 **源码分析** 在你提到的"joke"压缩包中,很可能包含了一个Scrapy项目,该项目可能有以下几个关键部分: 1. **spiders**目录:存放爬虫脚本,...

    MYSQL数据库配置与安装完全版教程

    MySQL 5.7.29是MySQL的一个重要版本,它包含了多项性能提升和新特性,如InnoDB存储引擎的优化,SQL语句的执行速度提升,以及更好的安全性。win32版本是专为32位Windows操作系统设计的,尽管如此,它在64位系统上也能...

    用Python调MySQL的国外经典书籍与源码

    在IT行业中,Python和MySQL是两个非常重要的工具。Python作为一种高级编程语言,因其简洁明了的语法和强大的库支持,常被用于数据处理和数据库管理。而MySQL则是一款流行的开源关系型数据库管理系统,广泛应用于各种...

    PHP、MySQL与JavaScript学习手册 第4版

    ### PHP、MySQL与JavaScript学习手册 第4版 ... ... ...PHP支持大多数流行的数据库,如MySQL、Oracle等,...这些知识对于Web开发者来说是非常宝贵的资源,可以帮助他们更好地理解和掌握这些技术,从而开发出更高质量的Web应用。

    jq.ajax+php+mysql数据库实现用户无刷新评论

    在现代Web应用中,提供实时用户体验是至关重要的。"jq.ajax+php+mysql数据库实现用户无刷新评论"的方案正是为了实现这一目标。这个技术组合允许用户在不...掌握这种技术对于构建高性能、用户友好的Web应用至关重要。

    mysql驱动+druid连接池+JdbcTemplate

    MySQL驱动、Druid连接池和JdbcTemplate是Java开发中与数据库交互的重要组件。在这个压缩包中,你将找到实现高效、稳定和灵活的数据库操作所需的所有资源。 首先,MySQL驱动是Java应用程序连接到MySQL数据库的基础。...

    MySQL-python-1.2.3.win-amd64-py2.7.exe

    当Python程序运行时,这个库会提供必要的函数调用来与MySQL服务器通信。如果没有这个库,Python的MySQL连接器将无法正常工作。 licenses.txt 文件通常包含软件的许可协议,详细说明了用户可以如何使用、修改和分发...

    mysql性能调优

    - **性能需求**:需确保在高并发压力下,所有数据库响应时间不超过0.1秒;在故障发生时,能在5分钟内完成快速恢复。 - **日常活动**:每天处理大量用户登录和登出操作,伴随大量的信息查询任务。 - **消息通信**:...

    nodejs_mysql.zip

    在IT行业中,Node.js是一个基于...学习如何在Node.js中使用MySQL库对于构建实时、高性能的Web应用程序至关重要,它能帮助开发者将前端和后端数据交互无缝整合。掌握这些技能,开发者可以构建出强大的全栈应用程序。

    mysql5.5-5.6性能调优最优文档

    MySQL作为一款广泛使用的开源关系型数据库管理系统,在不同版本间进行性能调优时需考虑其特性变化与优化策略。从MySQL 5.5到5.6版本,InnoDB存储引擎得到了显著增强,为实现高性能的数据库服务提供了更多可能性。...

    java连接MySQL数据库查询文档

    - **目的**: Java 连接 MySQL 数据库主要是为了在 Java 应用程序中实现对 MySQL 数据库的操作,包括查询、插入、更新和删除等操作。 - **应用场景**: 广泛应用于企业级应用、网站后端、移动应用后端等多种场景。 ##...

    mysql命令行常用命令.pdf

    MySQL是世界上最流行的开源关系型数据库管理系统之一,它以其高效、可靠和易用性著称。在MySQL中,命令行客户端是进行数据库管理的主要工具。以下是一些常用的MySQL命令行操作: 1. **启动和停止MySQL服务**: - `...

Global site tag (gtag.js) - Google Analytics