在具有4GB RAM的VPS(ssd)上(带有MariaDB的Centos 7.2)我有一个大表,每天都会更新几次而没有问题。
我想优化my.cnf,以便对该表的SELECT查询执行得更快。
到目前为止我在my.cnf:
def rotate(letter, rot):
shift = 97 if letter.islower() else 65
return chr((ord(letter) + rot - shift) % 26 + shift)
def encrypt(text, rot):
encrypted = []
for letter in text:
#if it's a space, keep it a space
#if it's a special character, keep it a special character
if letter.isalpha():
#use previous rotate function to rotate characters
encrypted.append(rotate(letter,rot))
else:
encrypted.append(letter)
return ''.join(encrypted)
text = input("Enter some text")
rot = int(input("Enter a number"))
print(encrypt(text,rot))
我必须将max_allowed_packet设置为较高的值,因为我在导入Feed时一直保持最大值。
缓存已启用,我设置query_cache_size = 256M和innodb_buffer_pool_size = 3072M
它似乎没有太大的区别(只是快一点)。一个查询大约9秒,现在需要8秒。
任何见解都将不胜感激!
答案 0 :(得分:1)
max_allowed_packet=1024M
- 这会消除其他内存使用情况
query_cache_size=256M
- 不;在这个尺寸下减慢了速度。不超过50M
innodb_buffer_pool_size=3072M
- 由于只有4GB的RAM和第一项的1G,因此将其设置为仅1G
一般规则:“你无法摆脱性能问题。”但是你可以通过任意提高可调参数来伤害性能而不了解它们可能导致交换。对于MySQL性能而言,交换是 terrrrrible 。
性能问题需要查看查询和表(SHOW CREATE TABLE
)。有时它就像添加“复合”索引一样简单。有时,一个简单的修复可以将查询速度提高十倍以上。
告诉我们'大表更新'。你完全重装吗? (如果是这样,讨论#73);大量更新:#49; SELECTs
同时击中桌子:#61。其他
(我编了这些数字,但我确信这个问题在这个论坛的某处是答案。如果你找不到它们,让我们看看你的信息;我们可以重新发明轮子。)