mysql 提高了插入数据速度

dujie4752041 2014-09-02 02:36:58
当前客户端建立 20 个独立线程 Load data inFile 插入, 只能达到 6m 每秒(我将自己提交功能关闭, 改成每隔一段时间, 手动提数据)
具体 mysql 服务器配置如下:
# mysqld --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"
# mysqld --install MySQLXY --defaults-file="C:\Program Files\MySQL\MySQL Server X.Y\my.ini"
[client]
port=3307
default-character-set=gbk
[mysql]
default-character-set=gbk
[mysqld]
port=3307
basedir="D:/Neware/Server/Data/mysql/"
datadir="D:/Neware/Server/Data/"
character-set-server=latin1
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=5000
max_connect_errors=10000
query_cache_size=91M
table_cache=1024
tmp_table_size=64M
thread_cache_size=120
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=54M
key_buffer_size=142M
read_buffer_size=20M
read_rnd_buffer_size=20M
sort_buffer_size=2M
max_allowed_packet=500M
innodb_additional_mem_pool_size=6M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=64M
innodb_buffer_pool_size=275M
innodb_log_file_size=55M
innodb_thread_concurrency=8
innodb_autoextend_increment=256
bulk_insert_buffer_size=128
sync_binlog=0
[WinMySQLAdmin]
Server=D:\Neware\Server\Data\mysql\bin\mysqld.exe
...全文
350 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dujie4752041 2014-09-10
  • 打赏
  • 举报
回复
引用 10 楼 iihero 的回复:
当前客户端建立 20 个独立线程 Load data inFile 插入? 试过,一个单独的线程Load data inFile的效率吗?这种bulk insert方式,并发多线程不一定效率就高. 最好对比一下,将线程数从1-20,挑几个测一下.应该有一个最佳值.
试过了,张个线程插入与 20 个线程插入基本是一样的效率.. 我把表把成 myisam 了, LOAD DATA INFILE 了,居然速度成倍增涨. 问题已经解决
dujie4752041 2014-09-04
  • 打赏
  • 举报
回复
引用 8 楼 zhu19774279 的回复:
没看清你的帖子,第4条没什么价值 [quote=引用 7 楼 zhu19774279 的回复:] 1. 表有索引吗?索引会影响插入速度 2. 表的主键是随机数吗,InnoDB在处理随机数主键上性能不佳(http://stackoverflow.com/questions/9819271/why-is-mysql-innodb-insert-so-slow) 3. 如果对ACID要求不那么严格,试着该一下这个看看innodb_flush_method = O_DIRECT 4. 据说MySQL的LOAD DATA INFILE性能不错,可以考虑用程序把数据处理成兼容的数据文件然后导入(http://kvz.io/blog/2009/03/31/improve-mysql-insert-performance/)
[/quote] 我现在最郁闷的是 MYSQL 5.7 的居然不兼容 MYSQL 5.5 的加载文件, 跟代码执行成功, 可是数据库就是没有数据。。
zhu19774279 2014-09-04
  • 打赏
  • 举报
回复
没看清你的帖子,第4条没什么价值
引用 7 楼 zhu19774279 的回复:
1. 表有索引吗?索引会影响插入速度 2. 表的主键是随机数吗,InnoDB在处理随机数主键上性能不佳(http://stackoverflow.com/questions/9819271/why-is-mysql-innodb-insert-so-slow) 3. 如果对ACID要求不那么严格,试着该一下这个看看innodb_flush_method = O_DIRECT 4. 据说MySQL的LOAD DATA INFILE性能不错,可以考虑用程序把数据处理成兼容的数据文件然后导入(http://kvz.io/blog/2009/03/31/improve-mysql-insert-performance/)
zhu19774279 2014-09-04
  • 打赏
  • 举报
回复
1. 表有索引吗?索引会影响插入速度 2. 表的主键是随机数吗,InnoDB在处理随机数主键上性能不佳(http://stackoverflow.com/questions/9819271/why-is-mysql-innodb-insert-so-slow) 3. 如果对ACID要求不那么严格,试着该一下这个看看innodb_flush_method = O_DIRECT 4. 据说MySQL的LOAD DATA INFILE性能不错,可以考虑用程序把数据处理成兼容的数据文件然后导入(http://kvz.io/blog/2009/03/31/improve-mysql-insert-performance/)
dujie4752041 2014-09-04
  • 打赏
  • 举报
回复
引用 5 楼 mchdba 的回复:
[quote=引用 3 楼 dujie4752041 的回复:] [quote=引用 2 楼 mchdba 的回复:] bulk_insert_buffer_size 这个值好小啊,提高到256M。
这个值只对 MyISAM 类型数据库表有用, 对 innoDB 没有什么用. 最大设备 32M 就行了吧。[/quote] bulk_insert_buffer_size Command-Line Format --bulk_insert_buffer_size=# Option-File Format bulk_insert_buffer_size System Variable Name bulk_insert_buffer_size Variable Scope Global, Session Dynamic Variable Yes Permitted Values Platform Bit Size 32 Type numeric Default 8388608 Min Value 0 Max Value 4294967295 Permitted Values Platform Bit Size 64 Type numeric Default 8388608 Min Value 0 Max Value 18446744073709547520 MyISAM uses a special tree-like cache to make bulk inserts faster for INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., and LOAD DATA INFILE when adding data to nonempty tables. This variable limits the size of the cache tree in bytes per thread. Setting it to 0 disables this optimization. The default value is 8MB 你的不是Myisam存储引擎?[/quote] 我用的是 innoDB 存储引擎, 我现在换了一个最新版本 5.7 mysql 哎, 原来 load data infile 的代码居然执行成功但没有插入数据库, 果然 orecle 就是出了一个坑。。各种语法在 MYSQL 5.7 版本前的都能用, 唯独在 5.7 上用就出问题.
九月茅 2014-09-04
  • 打赏
  • 举报
回复
引用 3 楼 dujie4752041 的回复:
[quote=引用 2 楼 mchdba 的回复:] bulk_insert_buffer_size 这个值好小啊,提高到256M。
这个值只对 MyISAM 类型数据库表有用, 对 innoDB 没有什么用. 最大设备 32M 就行了吧。[/quote] bulk_insert_buffer_size Command-Line Format --bulk_insert_buffer_size=# Option-File Format bulk_insert_buffer_size System Variable Name bulk_insert_buffer_size Variable Scope Global, Session Dynamic Variable Yes Permitted Values Platform Bit Size 32 Type numeric Default 8388608 Min Value 0 Max Value 4294967295 Permitted Values Platform Bit Size 64 Type numeric Default 8388608 Min Value 0 Max Value 18446744073709547520 MyISAM uses a special tree-like cache to make bulk inserts faster for INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., and LOAD DATA INFILE when adding data to nonempty tables. This variable limits the size of the cache tree in bytes per thread. Setting it to 0 disables this optimization. The default value is 8MB 你的不是Myisam存储引擎?
九月茅 2014-09-04
  • 打赏
  • 举报
回复
“我将自己提交功能关闭, 改成每隔一段时间, 手动提数据” 这个你是怎么实现的?逻辑是?也许这地方可以提高效率。
dujie4752041 2014-09-04
  • 打赏
  • 举报
回复
引用 2 楼 mchdba 的回复:
bulk_insert_buffer_size 这个值好小啊,提高到256M。
这个值只对 MyISAM 类型数据库表有用, 对 innoDB 没有什么用. 最大设备 32M 就行了吧。
iihero 2014-09-04
  • 打赏
  • 举报
回复
当前客户端建立 20 个独立线程 Load data inFile 插入? 试过,一个单独的线程Load data inFile的效率吗?这种bulk insert方式,并发多线程不一定效率就高. 最好对比一下,将线程数从1-20,挑几个测一下.应该有一个最佳值.
九月茅 2014-09-03
  • 打赏
  • 举报
回复
bulk_insert_buffer_size 这个值好小啊,提高到256M。
dujie4752041 2014-09-02
  • 打赏
  • 举报
回复
求关注啊。。。。

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧