При выполнении 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% времени.
Кто-нибудь знает, почему это так?