java.sql. Тесты соединения с PostgreSQL 8.4.6 - PullRequest
0 голосов
/ 02 мая 2011

У меня есть база данных postgresql с> 3 миллионами строк в двух таблицах. Что-то замедляет всю производительность, поэтому я немного проанализировал с помощью команды Ubuntu pg_top.

Я обнаружил, что всегда есть такой запрос:

SELECT 1 FROM <tablename>;

Похоже на оператор проверки соединения из java.sql.Connection, верно?

Когда я ввожу ту же команду в команде postgres, это займет 4 секунды ! Все индексы есть, я это проверил.

Вопрос: Как я могу изменить оператор теста, используемый объектом Connection?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 02 мая 2011

Возможно, вы используете какой-то пул соединений, прямо или косвенно, через источник данных или какую-либо другую среду, например, hibernate.

Проверьте документацию по пулу соединений и найдите термин «запрос проверки».Для postgres вы должны иметь возможность задать запрос, например:

select version();

Это должно быть намного быстрее.

0 голосов
/ 02 мая 2011

Была найдена корневая причина: фреймворк, на который опирался мой код, проверил, доступна ли таблица или нет.Это было сделано через

SELECT 1 from TABLENAME;

Это на самом деле возвращает ВСЕ строки из этой таблицы, и, поскольку у меня есть 3 миллиона строк, это занимает некоторое время.

Гораздо лучший подход (по крайней мере, дляPOSTGRESQL):

SELECT relname FROM pg_class WHERE relname = 'mytable';

Спасибо всем за уже опубликованные комментарии!

См. источник решения .

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