为什么MySQL Cluster插入太慢

时间:2015-11-09 10:21:33

标签: mysql

我在4台机器上运行MySQL Cluster(版本是7.3.10):
     - 2台机器,用于2个MGM节点(和SQL节点)
     - 2台数据节点的机器

但是插入时它太慢了(我每次使用批处理插入3000个语句,它只需要每秒900左右),然后尝试使用mysqldump也是一样慢,而且我一直在查找MySQL官方配置,但不知道要解决,这里有一些信息:

CPU:32个处理器内存:64GB网络:10000Mb / s

-------- config.ini ---------

[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=12288M
IndexMemory=2048M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=2
StringMemory=25
DiskPageBufferMemory=512M
SharedGlobalMemory=256M
LongMessageBuffer=32M
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=30
RedoBuffer=64M
MaxNoOfExecutionThreads=8
StopOnError=false
LockPagesInMainMemory=1
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
MaxNoOfAttributes=10000
MaxNoOfOrderedIndexes=1024
MaxNoOfUniqueHashIndexes=512
MaxNoOfConcurrentTransactions=20000
MaxNoOfConcurrentOperations=100000
TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=200

这是内存使用:

Node 1: Data usage is 0%(2487 32K pages of total 393216)
Node 1: Index usage is 0%(2205 8K pages of total 262272)
Node 2: Data usage is 0%(2487 32K pages of total 393216)
Node 2: Index usage is 0%(2205 8K pages of total 262272)

任何人都可以帮助我?

1 个答案:

答案 0 :(得分:0)

我一直在解决这个问题:

  1. 在JDBC URL rewriteBatchedStatements = true 上添加参数以使批量插入可以在一个SQL上提交(但您应该控制大小):

    插入table_name(...)值(1,2,3),(4,5,6),(7,8,9);

  2. 这可以节省大量的TCP通信时间,如果没有添加此参数,MySQL连接器将默认执行以下行为(SQL提交逐个):

    insert into table_name(...) values(1,2,3);
    insert into table_name(...) values(4,5,6);
    insert into table_name(...) values(7,8,9);
    


    1. 使用mysqldump导出MySQL数据时,可以添加参数 net_buffer_length = 8192 来控制每个SQL行的大小,不使用此参数,insert语句如下所示:

      插入table_name(...)值(1),(2),(3),(4),(5)....

    2. 所有表数据都将附加在一个SQL上,当数据如此BIG且UNDO日志可能已满时,很难导回。
      如果添加 extended-insert = false ,则SQL将类似于:

      insert into table_name(...) values(1,2,3);
      insert into table_name(...) values(4,5,6);
      insert into table_name(...) values(7,8,9);
      

      当数据太大时,可能会花费大量时间导入。