使用mysql每秒8000次更新

时间:2011-02-10 18:36:26

标签: mysql

我正在使用一台配备48GB RAM的16核机器,我有这个数据源,我需要大约8000个元素,每秒大约8000个查询。 mysql正在努力奋斗。这张桌子在MEMORY而不是在磁盘上(我正在尽我所能使它快速完成并且桌子每天都被清除)我想知道是否有一个神奇的my.cnf我可以尝试加速这件事。它试图进行插入然后更新很多,读取很少。

这就是我所拥有的。继续告诉我它有多糟。

skip-name-resolve
thread_cache_size = 128
table_cache = 4096
key_buffer = 256M
sort_buffer_size = 10M
read_buffer_size = 10M
read_rnd_buffer_size = 10M
max_allowed_packet = 1M
tmp_table_size=256M
query_cache_size=256M
query_cache_type=1
open_files_limit=8192
thread_concurrency=4

#used for tables in memory
max_heap_table_size=4000M

log_slow_queries=/var/log/mysql2/mysqld2.slow.log
long_query_time=2

查询可以是这样的:

UPDATE `pos` SET 
  `ExtID`='16044',
  `ECNID`='2814858', 
  `Pos`='-100', 
  `LAcct`='-100', 
  `SAcct`='0', 
  `CBasis`='-3515.00', 
  `EPrice`='359.15', 
  `OR`='XYZ', 
  `UID`='123', 
  `Rte`='AR', 
  `XYZRoute`='AR', 
  `PID`='AR', 
  `Time`='09:27:29', 
  `LXYZ`='R: Remove', 
  `LF`='-0.55', 
  `PF`='-0.00', 
  `TF`='-0.73', 
  `OF`='-0.00', 
  `SF`='-0.6896', 
  `CF`='-0.03', 
  `FF`='-0.0075', 
  `OF`='-0.0000', 
  `V`='AR', 
  `ECID`='AR', 
  `PO`='Y', 
  `Sold`='3515.00', 
  `SSold`='100', 
  `OC`='E', 
  `EA`='OV', 
  `S`='AREWAPL', 
  `U`='AESAPL', 
  `A`='12345', 
  `XXXID`='123471' 
WHERE `XXXID` = '1071' AND `EID` = '1' LIMIT 1

索引位于XXXID和EID

2 个答案:

答案 0 :(得分:3)

  1. 使用带有主变量的预准备语句。
  2. 运行多个线程(否则15个或16个核心很大程度上未使用。)

答案 1 :(得分:1)

由于你有大量的内存,你可以考虑简单地将传入的数据点存储在内存中(不是mysql,只是使用你正在使用的编程语言在数组中)。定期(比如说每小时一次),剥离一个新线程,将当前内存数据集批量加载到你的mysql数据库中。

如果你希望能够在加载时通​​过mysql实时查询这个数据集,那么你就会遇到一些更复杂的问题。