Сетевое подключение к Firebird 2.1 стало медленным после обновления до Ubuntu 10.04
У нас есть настройка, которую мы используем для разных клиентов: программа, подключающаяся к серверу Firebird в локальной сети.
До сих пор мы в основном использовали 32-битные процессоры под управлением Ubuntu LTS (недавно обновленный до 10.04).
Теперь мы представили серверы, работающие на 64-битных процессорах, под управлением Ubuntu 10.04 64-битных.
Внезапно некоторые запросы выполняются медленнее, чем раньше.
Вкратце: выполнение запроса локально работает как на 64-битных, так и на 32-битных серверах, но при выполнении одинаковых запросов по сети 64-битный сервер неожиданно оказывается намного медленнее.
Мы провели несколько проверок как локальных, так и удаленных подключений к 64-битным и 32-битным серверам, используя идентичные базы данных и идентичные запросы, работающие во Flamerobin.
Локальный запуск запроса занимает незначительное время: 0, 008 с на 64-битном сервере, 0, 014 с на 32-битном сервере. Так что сами серверы работают нормально.
При выполнении запросов по сети 64-битному серверу внезапно требуется до 0,160 с, чтобы ответить, в то время как 32-битный сервер отвечает за 0, 055 с.
Таким образом, старые серверы работают в два раза быстрее по сети, несмотря на то, что новые серверы работают в два раза быстрее, если работают локально.
Кроме того, установка идентична. На всех серверах установлена одна и та же версия Ubuntu 10.04, одна и та же версия Firebird и т. Д., С той лишь разницей, что некоторые из них 64-разрядные, а некоторые 32-разрядные.
Любая идея??
Я пытался найти его в Google, но не нашел жалоб на то, что Firebird 64bit работает медленнее, чем Firebird 32bit, за исключением того, что в журнале изменений Firebird 2.1 упоминается, что появился новый сетевой API, который в два раза быстрее, как только обновляются драйверы. использовать это.
Таким образом, я могу представить, что 64-битный драйвер все еще использует старый API, но я думаю, это немного натянуто.
Спасибо заранее за любые ответы!:)
2 ответа
Замедляются ли другие сетевые транзакции на 64-битных серверах? Может быть что-то так же просто, как плохой или устаревший сетевой драйвер.
Убедитесь, что на старых и новых серверах следующие вещи
Проверьте масштабирование окна на старом и новом серверах
Буфер чтения и записи для соединения
размер буферов может быть изменен по мере необходимости
root@x:~# sysctl -A | grep net | grep mem
Проверьте эти переменные
Они определяют максимальное использование буфера памяти по умолчанию для всех сетевых подключений в ядре.
net.core.wmem_max = 131071 net.core.rmem_max = 131071 net.core.wmem_default = 126976 net.core.rmem_default = 126976
Они определяют использование буферной памяти, специфичное для соединений TCP
net.ipv4.tcp_mem = 378528 504704 757056 net.ipv4.tcp_wmem = 4096 16384 4194304 net.ipv4.tcp_rmem = 4096 87380 4194304
Три указанных значения являются размерами буфера "min default max". Поэтому для запуска с linux будут использоваться значения по умолчанию для буфера чтения и записи для каждого соединения. По мере увеличения количества соединений эти буферы будут уменьшаться (максимально до указанного минимального значения). То же самое касается максимального значения буфера.
Эти значения могут быть установлены с помощью этого
sysctl -w KEY=KEY VALUE
Проверьте другие параметры сети TCP
Попробуйте это
на старом сервере
sysctl -a | grep ^net.ipv4 >s1
на новом сервере
sysctl -a | grep ^net.ipv4 >s2
Теперь сделайте diff файлов s1 и s2 (после копирования s2 на старый сервер
diff s1 s2
Это покажет разницу в параметрах
проверить статус iptables
iptables -L iptables -t nat -L
на обоих серверах
Также проверьте статус selinux