почему производительность нескольких считывателей в SQLite снижается при использовании нескольких соединений вместо одного сериализованного? - PullRequest
1 голос
/ 18 января 2012

При выполнении SELECT, который одновременно возвращает более 1 строки в нескольких потоках считывателя, я вижу, что использование нескольких соединений (соединение на поток считывателя) хуже, чем использование только одного соединения для всех (в режиме SERIALIZED).

У меня есть таблица базы данных на оперативном диске с 6 столбцами INTEGER, столбец [0] - ПЕРВИЧНЫЙ КЛЮЧ. У меня есть 10000 записей. все 5 столбцов заполнены случайными числами с помощью rand (). У меня 50 читательских потоков, каждая из которых выполняет 50 итераций: ВЫБРАТЬ * ОТ ТАБЛИЧНОГО ЗАКАЗА ПО

Тестовые случаи: 1. одно соединение (режим SERIALIZED) 2. 50 подключений (все еще в режиме SERIALIZED) 3. 50 соединений (многопоточный режим)

Что кажется странным, так это то, что показатели (2) и (3) хуже, чем показатели (1). (2) примерно в 3 раза больше (1) и (3) в 4 раза больше (1). Среднее время итерации было значительно выше, равно как и самое длительное время итерации.

Единственная подозрительная подсказка, которую я имею, заключается в том, что в (1) общее количество времени системных вызовов (strace -c) было пренебрежимо мало, но в (2) и (3) наносон занял 99% времени.

Кто-нибудь знает, почему это так?

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