2016-02-22 7 views
2

При выполнении вставки или даже инструкции select с использованием C# в отношении установки MemSQL она очень медленная. Запросы, выполняемые на сервере базы данных, невероятно быстры.Медленная производительность при вставке записей в memsql

Так что что-то между кодом запроса и MemSQL не выполняется. При выполнении программы вставки образца он просто вставляет 40-60 записей в секунду, но при выполнении теста скорости он вставляет 2,2 миллиона в секунду. Поэтому проблема должна быть где-то в другом месте. Есть идеи?

ответ

1

Похоже, узкое место является тем, что вы связываете/выполняете запросы. Например, вы можете запускать только одну вставку за раз, и в этом случае все время тратится на ожидание латентности соединения «туда и обратно». Первые вещи, которые я предлагаю попробовать, если вы еще не сделали, вставляют несколько строк в запрос и одновременно запускают несколько запросов. Для некоторых примеров см. http://docs.memsql.com/latest/concepts/multi_insert_examples/#c. Если вы уже делаете это, можете ли вы предоставить более подробную информацию о том, как вы используете свой тест?

1

Проблема заключается в самом протоколе MySQL. Это соединение (и почти все протоколы проводки реляционных баз данных) требует, чтобы запрос был отправлен, обработан, а затем получен клиентом для полного завершения.

Это означает, что один поток, выполняющий запросы, последовательно должен ждать, пока каждый запрос выполнит полный обратный ход. Вы можете использовать несколько потоков для повышения пропускной способности, параллельно используя несколько запросов (рекомендуемые потоки равны доступным ядрам). Вы также можете использовать async-методы, чтобы обработка была как можно быстрее и только ожидала ввода-вывода.

Вы также можете объединить несколько операторов INSERT в один запрос, который позволит значительно увеличить пропускную способность.

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

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