AWS RDS PostgreSQL error " оставшиеся слоты подключения зарезервированы для подключений суперпользователя без репликации"
на панели мониторинга я вижу, что в настоящее время 22 открытых соединения с экземпляром БД блокируют новые соединения с ошибкой: "оставшиеся слоты подключения зарезервированы для подключений суперпользователя без репликации".
Я обращаюсь к БД из API веб-службы, работающей на экземпляре EC2, и всегда придерживаюсь лучшей практики:
Connection connection = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
Class.forName(DB_CLASS);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL_Query_String);
...
resultSet.close();
statement.close();
connection.close();
могу ли я сделать что-то еще в коде?
должен ли я сделать что-то еще в БД управление?
есть ли способ периодически закрывать соединения?
спасибо,
3 ответов
Amazon должен установить количество подключений на основе права каждой модели требовать определенный объем памяти и подключений
MODEL max_connections innodb_buffer_pool_size
--------- --------------- -----------------------
t1.micro 34 326107136 ( 311M)
m1-small 125 1179648000 ( 1125M, 1.097G)
m1-large 623 5882511360 ( 5610M, 5.479G)
m1-xlarge 1263 11922309120 (11370M, 11.103G)
m2-xlarge 1441 13605273600 (12975M, 12.671G)
m2-2xlarge 2900 27367833600 (26100M, 25.488G)
m2-4xlarge 5816 54892953600 (52350M, 51.123G)
но если вы хотите, вы можете изменить максимальный размер подключение к таможня
из консоли RDS > группы параметров > изменить параметры,
можно изменить значение параметра max_connections на пользовательское значение.
для периодического закрытия соединений вы можете настроить задание cron, например этот.
select pg_terminate_backend(procpid)
from pg_stat_activity
where usename = 'yourusername'
and current_query = '<IDLE>'
and query_start < current_timestamp - interval '5 minutes';
вы можете изменить максимальные соединения в Parameters Group
для вашего экземпляра RDS. Попробуйте увеличить его.
Или вы можете попробовать обновить свой экземпляр, так как max connexions имеет значение {DBInstanceClassMemory/31457280}
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
Я использую Amazon RDS, SCALA,Postgresql & Slick. Прежде всего-количество доступных соединений в RDS зависит от количества доступных RAM - т. е. размер экземпляра RDS. Это лучше всего не изменять номер conn по умолчанию.
вы можете проверить максимальный номер соединения, выполнив следующую инструкцию SQL на экземпляре БД RDS:
show max_connections;
Проверьте конфигурацию пружины, чтобы увидеть сколько нити ты нереста:
database {
dataSourceClass = org.postgresql.ds.PGSimpleDataSource
properties = {
url = "jdbc:postgresql://test.cb1111.us-east-2.rds.amazonaws.com:6666/dbtest"
user = "youruser"
password = "yourpass"
}
numThreads = 90
}
все подключения сделаны при загрузке SRING инициализации поэтому остерегайтесь не пересекать предел RDS. Это включает в себя другие службы, которые подключаются к БД. В этом случае количество подключений будет 90+.
текущий предел для БД.Т2.мал 198 (4 ГБ оперативной памяти)