mysql вставляет индекс в память - PullRequest
1 голос
/ 24 ноября 2011

Я использую MySQL (MyISA). Таблица с более чем 8 миллионами строк. Первичный индекс по 'id'.

Мое приложение покажет:

first run: 55 req/sec, 
second run: ~120 req/sec, 
third run: ~1200 req/sec, 
fourth run: ~4500 req/sec, 
fifth run: ~9999 req/sec

После перезапуска mysql-сервера снова то же самое. Как поместить ВСЕ индексы сразу в память после запуска сервера базы данных?

В my.cnf

key_buffer_size=2000M

Пример кода:

now = datetime.datetime.now()
cursor = connection.cursor()
for x in xrange(1, 10000):
    id = random.randint(10, 100000) # random first 10000 records for cache
    cursor.execute("""SELECT num, manufacturer_id
                   FROM product WHERE id=%s LIMIT 1""", [id])
    cursor.fetchone()    

td = datetime.datetime.now() - now
sec = td.seconds + td.days * 24 * 3600
print "%.2f operation/sec" % (float(x) / float(sec))

1 Ответ

0 голосов
/ 24 ноября 2011

Я думаю, что здесь работают два кэша. Одним из них является индексный кеш, который можно предварительно загрузить с помощью LOAD INDEX INTO CACHE

Другой - кеш запросов , и я думаю, что в вашем случае именно здесь достигается наибольшая производительность. AFAIK, который не может быть предварительно загружен ни одной командой mysql.

Что вы можете сделать, это заменить последние N запросов, которые выполняются до перезапуска. Эти запросы будут заполнять кеш. Или сохраните файл некоторых реалистичных запросов для запуска при запуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...