我正在使用一台配备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
答案 0 :(得分:3)
答案 1 :(得分:1)
由于你有大量的内存,你可以考虑简单地将传入的数据点存储在内存中(不是mysql,只是使用你正在使用的编程语言在数组中)。定期(比如说每小时一次),剥离一个新线程,将当前内存数据集批量加载到你的mysql数据库中。
如果你希望能够在加载时通过mysql实时查询这个数据集,那么你就会遇到一些更复杂的问题。