Я подключаюсь к базе данных MySQL (InnoDB) через соединение с довольно высокой задержкой (~ 80 мс), но относительно высокой пропускной способностью.
Я заметил, что время запроса сильно варьируется в зависимости от того, как выдается запрос. В следующих примерах я выполняю запрос для одной маленькой строки по первичному ключу. Время запроса:
mysql
): ~ 160 мс( "L2" означает, что кэширование второго уровня для Hibernate включено, "c3p0" означает, что c3p0 был включен, "начать", "получить" и "совершить" - это тайминг для различных под-методов, вызванных во время запроса)
Это, грубо говоря, результаты "устойчивого состояния", поэтому кэш L2 горячий, а время запуска Hibernate игнорируется. Я предполагаю, что "get" обычно равен 0 мс, когда кэш L2 включен, потому что на самом деле не получается получать.
Мои вопросы:
mysql
, по-видимому, требуется 2 раунда для простого запроса.У меня нет рекомендаций, специфичных для вашей проблемы, но есть несколько методов отладки, которые помогут вам понять, что происходит. Если вы можете добавить параметр подключения к URL-адресу соединения, драйвер JDBC будет записывать в основном все, что происходит по кабелю с таймингами:
JDBC: MySQL://сервер/база данных profileSQL = истина
http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html
Другим способом, который вы можете посмотреть, является просмотр вашей сетевой трафик через tcpdump. mk-query-digest из инструментов Maatkit может читать вывод дампа и помочь вам точно определить, что происходит:
Надеюсь, что это поможет.