免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4637 | 回复: 7
打印 上一主题 下一主题

关于大数据update的讨论 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-07 11:26 |只看该作者 |倒序浏览
本机环境,i3 2.53G,内存1G,RHEL5.4 mysql5.1
在一个有一亿数据的表上进行update表结构如下:

mysql> desc test_innodb;
+-------+-------------+------+-----+-------------------+-----------------------------+
| Field | Type        | Null | Key | Default           | Extra                       |
+-------+-------------+------+-----+-------------------+-----------------------------+
| id    | bigint(20)  | YES  |     | NULL              |                             |
| name  | varchar(64) | YES  |     | NULL              |                             |
| name2 | varchar(64) | YES  |     | NULL              |                             |
| date  | timestamp   | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-------------+------+-----+-------------------+-----------------------------+
4 rows in set (0.12 sec)

在update的时候出现了如下错误:

ERROR 1206 (HY000): The total number of locks exceeds the lock table size

在google搜了一些处理办法,说需要增加innodb_buffer_pool_size的值,修改为400M,800M,重启mysql均无效。
还说要修改max_write_lock_count的值,这个在my.cnf里没有,下面是本机的结果:
mysql> show variables like 'max_write_lock_count';
+----------------------+------------+
| Variable_name        | Value      |
+----------------------+------------+
| max_write_lock_count | 4294967295 |
+----------------------+------------+
1 row in set (0.12 sec)

目前该问题没有解决,请高手们教教我该怎么办呢?谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-06-07 14:47 |只看该作者
在google搜了一些处理办法,说需要增加innodb_buffer_pool_size的值,修改为400M,800M,重启mysql均无效。

论坛徽章:
0
3 [报告]
发表于 2011-06-07 14:48 |只看该作者
在google搜了一些处理办法,说需要增加innodb_buffer_pool_size的值,修改为400M,800M,重启mysql均无效。

那是因为你的buffer还不够大

1G内存,也的确小了点儿。如果条件有限,那么就不要一次更新完吧,分多次好了。

论坛徽章:
0
4 [报告]
发表于 2011-06-10 12:37 |只看该作者
mysql> show variables like "%max_write%";
+----------------------+----------------------+
| Variable_name        | Value                |
+----------------------+----------------------+
| max_write_lock_count | 18446744073709551615 |
+----------------------+----------------------+
1 row in set (0.00 sec)

论坛徽章:
0
5 [报告]
发表于 2011-06-10 13:29 |只看该作者
回复 1# txwdhs


    还说要修改max_write_lock_count的值,这个在my.cnf里没有,下面是本机的结果:
mysql> show variables like 'max_write_lock_count';
+----------------------+------------+
| Variable_name        | Value      |
+----------------------+------------+
| max_write_lock_count | 4294967295 |
+----------------------+------------+
1 row in set (0.12 sec)


这个是32位系统中最大的值....也是默认值....


难道你的并发产生的读写锁  有这么多?

论坛徽章:
0
6 [报告]
发表于 2011-06-10 13:59 |只看该作者
max_write_lock_count
Command-Line Format         --max_write_lock_count=#
Option-File Format         max_write_lock_count
Option Sets Variable         Yes, max_write_lock_count
Variable Name         max_write_lock_count
Variable Scope         Global
Dynamic Variable         Yes
          Permitted Values
Platform Bit Size         32
Type         numeric
Default         4294967295
Range         1-4294967295
          Permitted Values
Platform Bit Size         64
Type         numeric
Default         18446744073709547520
Range         1-18446744073709547520

After this many write locks, permit some pending read lock requests to be processed in between.

论坛徽章:
0
7 [报告]
发表于 2011-06-10 19:05 |只看该作者
mysql> update t1 set pad="cu test 0000";
Query OK, 80000000 rows affected (18 min 27.58 sec)
Rows matched: 80000000  Changed: 80000000  Warnings: 0

论坛徽章:
0
8 [报告]
发表于 2011-06-20 11:39 |只看该作者
谢谢大家,最后发现是我犯了个低级错误。。。配置文件的位置写错了。。导致配置没生效,加大了innodb_buffer_pool_size的大小已经没有问题了,谢谢大家帮我解决问题!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP