免费注册 查看新帖 |

Chinaunix

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

mysql cluster 大数据量insert的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-29 11:37 |只看该作者 |倒序浏览
表http_auth有100w条数据,我想将这100w条数据插到另外一个结构相同的表http_auth2中,报错如下:
mysql> select count(*) from http_auth;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from http_auth2;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql> insert into http_auth2 select * from http_auth;
ERROR 1297 (HY000): Got temporary error 4002 'Send to NDB failed' from NDBCLUSTER
mysql>
mysql> show warnings;                                 
+---------+------+---------------------------------------------------------------+
| Level   | Code | Message                                                       |
+---------+------+---------------------------------------------------------------+
| Warning | 1297 | Got temporary error 4002 'Send to NDB failed' from NDB        |
| Error   | 1297 | Got temporary error 4002 'Send to NDB failed' from NDBCLUSTER |
| Warning | 1297 | Got temporary error 4002 'Send to NDB failed' from NDB        |
| Error   | 1297 | Got temporary error 4002 'Send to NDB failed' from NDBCLUSTER |
| Error   | 1181 | Got error 4002 during ROLLBACK                                |
+---------+------+---------------------------------------------------------------+
5 rows in set (0.00 sec)

网上查了半天,也不知道这个4002错误到底和什么有关,有哪位高人遇到过吗?多谢

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
2 [报告]
发表于 2012-10-29 15:28 |只看该作者
@baiyaj
没用过NDB,你尝试一次少量可以么?

论坛徽章:
0
3 [报告]
发表于 2012-10-30 10:13 |只看该作者
100w条数据,一次插入肯定报错,分了两次插入,能插入成功,但是插入100w条记录报错的原因还是没有找到
mysql> insert into http_auth2 select * from http_auth;
ERROR 1297 (HY000): Got temporary error 4002 'Send to NDB failed' from NDBCLUSTER

mysql> insert into http_auth2 select * from http_auth where uid<=500000;
Query OK, 500000 rows affected (34.60 sec)
Records: 500000  Duplicates: 0  Warnings: 0

mysql> insert into http_auth2 select * from http_auth where uid>=500001;
Query OK, 500000 rows affected (12.93 sec)
Records: 500000  Duplicates: 0  Warnings: 0

mysql> select count(*) from http_auth2;                                 
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.09 sec)

mysql>
如果是oracle,是不会有这种问题的,不知道是不是什么参数设置有问题呢

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
4 [报告]
发表于 2012-10-30 11:59 |只看该作者
@baiyaj
估计是你NDB的某个配置值影响的。

论坛徽章:
0
5 [报告]
发表于 2012-10-30 14:49 |只看该作者
配置文件为
[TCP DEFAULT]
SendBufferMemory=32M
ReceiveBufferMemory=32M

[MGM DEFAULT]
PortNumber: 1186
datadir=/app/mysql/mysqlc/

[NDB_MGMD]
NodeId=1
ArbitrationRank=1       
hostname=192.168.21.24
LogDestination=FILE:filename=ndb_1_cluster.log,maxsize=10000000,maxfiles=6

[NDBD DEFAULT]
NoOfReplicas=2

Datadir=/app/mysql/data
FileSystemPathDD=/app/mysql/data
BackupDataDir=/app/mysql/data/backup/

DataMemory=10254M
IndexMemory=1282M
LockPagesInMainMemory=1

MaxNoOfConcurrentOperations=1000000
MaxNoOfConcurrentTransactions=16384

StringMemory=25
MaxNoOfTables=4096
MaxNoOfOrderedIndexes=2048
MaxNoOfUniqueHashIndexes=2048
MaxNoOfAttributes=24576
MaxNoOfTriggers=14336

TransactionBufferMemory=8M

TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=100
TimeBetweenEpochsTimeout=32000

### Params for LCP
DiskCheckpointSpeedInRestart=100M
DiskCheckpointSpeed=10M
TimeBetweenLocalCheckpoints=30
NoOfFragmentLogFiles=300
TransactionDeadLockDetectionTimeOut=10000

### Heartbeating
HeartbeatIntervalDbDb=1500
HeartbeatIntervalDbApi=1500

### Params for setting logging
MemReportFrequency=30
BackupReportFrequency=10
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15

### Params for BACKUP
BackupMaxWriteSize=1M
BackupDataBufferSize=24M
BackupLogBufferSize=16M
BackupMemory=40M

### Params for ODIRECT
#Reports indicates that odirect=1 can cause io errors (os err code 5) on some systems. You must test.
ODirect=1

### Watchdog
TimeBetweenWatchdogCheckInitial=60000

### TransactionInactiveTimeout  - should be enabled in Production
TransactionInactiveTimeout=60000
### New 7.1.10 redo logging parameters
RedoOverCommitCounter=3
RedoOverCommitLimit=20
### REALTIME EXTENSIONS
#RealTimeScheduler=1
### REALTIME EXTENSIONS FOR 6.3 ONLY
#SchedulerExecutionTimer=80
#SchedulerSpinTimer=40

### DISK DATA
SharedGlobalMemory=512M
DiskPageBufferMemory=1024M

### Multithreading
MaxNoOfExecutionThreads=4

### Increasing the LongMessageBuffer b/c of a bug (20090903)
LongMessageBuffer=16M

BatchSizePerLocalScan=512

[NDBD]
NodeId=2
hostname=192.168.21.24


[NDBD]
NodeId=3
hostname=192.168.21.25

[MYSQLD DEFAULT]
DefaultOperationRedoProblemAction=ABORT
BatchSize=512
#BatchByteSize=2048K
#MaxScanBatchSize=2048K

[MYSQLD]
NodeId=60
ArbitrationRank=2
hostname=192.168.21.24

[MYSQLD]
NodeId=61
ArbitrationRank=2
hostname=192.168.21.25

[MYSQLD]
[MYSQLD]

论坛徽章:
0
6 [报告]
发表于 2012-10-31 09:31 |只看该作者
回复 5# baiyaj
一下是在API里看到的,应该可以帮到你:

事务参数

下面讨论的三个参数十分重要,这是因为,它们会影响并发事务的数目,以及系统能够处理的事务的大小。MaxNoOfConcurrentTransactions用于设置节点内可能的并发事务数目。MaxNoOfConcurrentOperations用于设置能同时出现在更新阶段或同时锁定的记录数目。

对于打算设定特定值、不使用默认值的用户,这两个参数可能正是他们所需的(尤其是MaxNoOfConcurrentOperations)。默认值是为使用小型事务的系统而设置的,为的是确保这类事务不会使用过多的内存。

·         [NDBD]MaxNoOfConcurrentTransactions

对于簇中的每个活动事务,必须在簇节点之一中有1条记录。对事务的协调任务是在各节点间进行的:在簇中,事务记录的总数等于任意给定节点中的事务数乘以簇中的节点数。

事务记录被分配给单独的MySQL服务器。正常情况下,对于使用簇中任何表的每个连接,必须为其分配至少1条事务记录。出于该原因,应确保簇中的事务记录数大于簇中所有MySQL服务器的并发连接数。

对于所有的簇节点,必须将该参数设置为相同的值。

更改该参数不安全,如果这样做,会导致簇崩溃。当某一节点崩溃时,簇中的一个节点(实际上是生存时间最久的节点)将为崩溃之时正在崩溃节点中运行的所有事务建立事务状态。因此,重要的是,该节点的事务记录数不低于失效节点中的事务记录数。

该参数的默认值为4096.

·         [NDBD]MaxNoOfConcurrentOperations

根据事务的大小和数目调整该参数的值,这个想法不错。执行仅包含少量操作且不涉及很多记录的事务时,不需要将该参数设置得很高。但在执行涉及大量记录的大事务时,需要将该参数设置得较高。

对于每次事务更新的簇数据,均会保存记录,并会将它们保存在事务协调器中以及执行实际更新的节点中。这些记录包含所需的状态信息,这类信息可用于为回滚操作找到UNDO记录,用于锁定查询或其他目的。

该参数应被设置为:事务中同时更新的记录数除以簇数据节点的数目。例如,在包含4个数据节点的簇中,如果预期处理的、使用事务的并发更新数为1000000,就应将该值设置为1000000 / 4 = 250000。

设置锁定的读请求也会导致操作记录的创建。在单独节点内也会分配一些额外的空间,以便处理在节点间分配不完美的问题。

当查询使用唯一性哈希索引时,对于事务中的每条记录,实际上将使用两条操作记录。第1条记录代表在索引表中的读,第2条记录负责处理基表上的操作。

该参数的默认值为32768.

该参数实际上处理的是能分别配置的两个值。第1个值指定了将多少操作记录放到事务协调器中,第2个值指定了多少操作记录是数据库的本地记录。

对于在8节点簇上执行的特大事务,它要求事务协调器中的操作记录数不少于事务中涉及的读取、更新和删除次数。然而,簇中的操作记录分布在所有的8个节点上。因此,如果有必要为特大事务配置系统,良好的方法是分别配置该参数的两个部分。MaxNoOfConcurrentOperations总会被用于计算节点的事务协调器部分中的操作记录数。

应了解操作记录对内存的要求,这点也很重要。每记录约消耗1KB。

·         [NDBD]MaxNoOfLocalOperations

默认情况下,将按照1.1 * MaxNoOfConcurrentOperations计算该参数,它适合于具有很多并发事务但不存在特大事务的系统。如果需要在某一时间处理特大事务而且有很多节点,最好通过明确指定该参数以覆盖默认值。




   

论坛徽章:
0
7 [报告]
发表于 2012-10-31 12:02 |只看该作者
非常感谢,我调整了参数
MaxNoOfConcurrentTransactions=100000
MaxNoOfConcurrentOperations=1000000
MaxNoOfLocalOperations=1100000
那个错误就没有了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP