2016-01-13 4 views
4

У меня есть db.r3.2xlarge с 4000 PIOPS. Я вставляю 1 миллиард строк из экземпляров EC2. Прямо сейчас есть 40 ГБ свободной памяти.Почему AWS RDS MYSQL INSERT использует READ IOPS?

В настоящее время из 4000 PIOPS, READ PIOPS принимает 3000, и я получаю только 1000 WRITE PIOPS. Итак, это было низкое письмо.

Как я могу проверить, который принимает READ PIOPS? И как ускорить дело?

спасибо.

Edit:

insert ignore into dna (hash, time, song_id) values (b%s, b%s, %s)

I'm using self.cursor.executemany(query, rows) из питона

hash + time + song_id является составным первичным ключом.

Я использую AWS RDS InnoDB.

У меня 4000 PIOPS. Тем не менее, он теперь застрял на уровне 2000 баллов. У меня 60 МБ/с НАПИШИТЕ ЧЕРЕЗ.

+1

показывает нам заявление вставки, скажите нам, какой тип базы данных, которую вы используете, и подтвердить, что вы на самом деле с помощью RDS и не база данных установлены на EC2 – Vorsprung

+0

@Vorsprung, я сделал изменения. Пожалуйста, дайте мне знать. – moeseth

+0

, вероятно, не имеет никакого значения, но вы не сказали, используете ли вы mysql или Aurora – Vorsprung

ответ

2

Если хэш ваш первичный ключ или индекс, вы не вставляя в первичной мой и/или индекс заказа.

Кроме того, вы используете INSERT IGNORE, что предполагает, что вы пытаетесь избежать неизбежной повторяющейся ключевой ошибки, потому что есть дубликаты данных среди того, что вы вставляете.

По одной из этих причин InnoDB должен много готовить для загрузки соответствующих страниц из табличных пространств на диске в память, чтобы найти пятно (-ы) в первичных и/или любых вторичных индексах, где следующая строка должен идти, что может оказаться потраченным впустую, если строка является дубликатом, и может потребоваться разделение страницы, чтобы пространство было доступно для случайного ввода следующего хэша в нужное место.

Если хеш является первичным ключом, вероятно, было бы полезно сбросить все остальные индексы при вставке, а затем добавить их в конце, где они могут быть построены более эффективно.

Предварительная сортировка вставки с помощью хэш должен помочь, некоторые, если партии достаточно велики, и хэш действительно первичный ключ.

+0

мое шоу создать таблицу выглядит - CREATE TABLE 'dna' ( ' hash' бит (26) NOT NULL, 'time' бит (14) NOT NULL,' song_id' MEDIUMINT (9) NOT NULL, PRIMARY KEY ('hash',' time', 'song_id') ИСПОЛЬЗОВАНИЕ BTREE ) ENGINE = InnoDB DEFAULT CHARSET = latin1 – moeseth

+0

' бит (26) 'является интересным выбором. Я предполагаю, что вы понимаете, что (если моя математика правильная), этот столбец может поддерживать только 67 108 864 (2^26) уникальных хэшей. Вы вставляете строки в отсортированном порядке (hash, time, song_id)? –

+0

Привет, я не уверен, что вы подразумеваете под отсортированным порядком. Мой первичный ключ (hash + time + song_id), поэтому он не просто бит (26). Он также учитывает time + song_id при выборе либо уникального, либо нет. не так ли? – moeseth

Смежные вопросы