레일 데이터베이스 연결 풀 작동 방식
레일 데이터베이스 연결 풀 개념을 배우고 있습니다.레일 애플리케이션에서 나는 풀 사이즈를 5로 정의했습니다.
연결 풀 크기에 대한 제 이해는 아래와 같습니다.
서버 시작 레일이 database.yml 파일에 정의된 n개의 연결을 자동으로 작성할 때.제 경우에는 풀 사이즈가 5이므로 5개의 연결이 생성됩니다.
데이터베이스에 액세스할 필요가 있는 경우 http 요청마다 레일은 연결 풀에서 사용 가능한 연결을 사용하여 요청을 처리합니다.
하지만 제 질문은 제가 한번에 1000개의 요청을 하면 제 연결 풀 크기가 5개밖에 되지 않기 때문에 대부분의 요청이 데이터베이스 연결에 접근할 수 없다는 것입니다.
레일 연결 풀에 대한 위의 이해가 맞습니까?
감사해요.
목적:
데이터베이스 연결은 스레드 안전하지 않으므로 ActiveRecord는 각 스레드에 대해 별도의 데이터베이스 연결을 사용합니다.
제한 요인:
총 데이터베이스 연결은 사용하는 데이터베이스 서버(예: Posgres: 기본값은 일반적으로 100 이하), 앱 서버의 구성(사용 가능한 프로세스 수/스레드 수), Active Record의 구성: Connection Pool 기본값은 5입니다.
풀 크기:
Active Record의 풀 크기는 단일 프로세스에 대한 것입니다.스레드는 이 풀의 연결을 사용하고 나중에 자동으로 해제합니다.(직접 스레드를 생성하지 않는 한 수동으로 스레드를 해제해야 합니다.)응용프로그램이 여러 프로세스에서 실행 중인 경우 각 프로세스에 대해 5개의 데이터베이스 연결이 있습니다.만약 당신의 서버가 1000개의 요청을 동시에 받으면, 당신의 서버는 이러한 연결들 사이에 요청들을 분배할 것이고, 그것이 가득 차면, 나머지 요청들은 그들의 차례를 기다립니다.
자세한 내용은 다음 사이트에서 확인:
https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html
예, 문서에서:
연결 풀은 제한된 수의 데이터베이스 연결에 스레드 액세스를 동기화합니다.기본 개념은 각 스레드가 풀에서 데이터베이스 연결을 체크하고 해당 연결을 사용한 후 다시 연결을 체크하는 것입니다.ConnectionPool은 스레드를 완벽하게 안전하게 사용할 수 있으며 Connection이 있는 한 두 스레드에서 동시에 연결을 사용할 수 없습니다.Pool의 계약서는 정확하게 지켜졌습니다.또한 모든 연결이 체크아웃되었는데 스레드가 연결을 체크아웃하려고 할 경우 다른 스레드가 연결을 체크아웃할 때까지 ConnectionPool이 대기합니다.
출처 : http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html
유니콘 같은 것을 http 서버로 사용하는 경우:
Unicon에서는 각 프로세스가 자체 연결 풀을 설정하므로 db 풀 설정이 5이고 Unicon 작업자가 5명이면 최대 25개의 연결을 가질 수 있습니다.그러나 각 유니콘 작업자는 한 번에 하나의 연결만 처리할 수 있으므로 앱이 내부적으로 스레드를 사용하지 않는 한 각 작업자는 실제로 하나의 DB 연결만 사용하게 됩니다.
언급URL : https://stackoverflow.com/questions/34350406/how-rails-database-connection-pool-works
'programing' 카테고리의 다른 글
ORA-27101: 공유 메모리 영역이 존재하지 않습니다 (0) | 2023.10.27 |
---|---|
플랫폼별 새 라인에 대한 Node.JS 상수? (0) | 2023.10.27 |
자바스크립트 청취자, "키 누름"은 백스페이스를 감지하지 못합니까? (0) | 2023.10.27 |
팬더를 사용하여 새 기둥에 증분 숫자를 추가하는 방법 (0) | 2023.10.27 |
동일한 표에 있는 다른 두 열의 연접 관계로 열을 업데이트하는 방법 (0) | 2023.10.27 |