programing

"너무 많은 데이터베이스 연결"의 원인

bestprogram 2023. 10. 29. 19:55

"너무 많은 데이터베이스 연결"의 원인

내 워드프레스 웹사이트에 "데이터베이스 연결 설정 오류" 마사지가 발생했습니다.

호스트는 "사용자"가 한 번에 열려 있는 데이터베이스 연결이 너무 많기 때문이라고 알려주었습니다.이로 인해 추가 연결을 하는 동안 오류가 발생하여 마사지가 수행되었습니다.

교착 상태에 빠진 데이터베이스 연결을 제거하여 이 문제를 해결했습니다.임시 테이블에 데이터를 복사하는 연결이 여러 개 있었지만, 하나의 업데이트를 기다리는 대규모 조회 집합으로 인해 교착 상태가 발생했습니다.

누가 어떻게 이런 일이 발생했는지, 어떻게 하면 피할 수 있는지 설명해 주실 수 있나요?

(p.s: 해당 WP 설치에는 2000개 이상의 게시물이 있음)

WP와 데이터베이스 속도에 많은 도움이 되는 것은 게시물 및 페이지 수정에 대한 데이터베이스를 정리하는 것입니다.WP는 각 편집 수정본의 전체 복사본을 보관하고 있으며, 2000개의 게시물을 사용하면 데이터베이스가 방대해질 수 있습니다.수정사항을 지우려면 phphmyadmin에서 SQL 쿼리로 실행합니다.데이터베이스 크기가 75% 감소하고 수정사항을 삭제한 후 훨씬 더 빨리 실행되는 것을 보았습니다.WP를 설치할 때 테이블 접두사를 변경한 경우 테이블 접두사를 변경하고 백업을 실행합니다.

DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision'

그런 다음 해당 쿼리를 실행하여 수정사항 삭제를 완료한 후 테이블을 최적화합니다. phpmyadmin의 드롭다운 메뉴에서 전체 데이터베이스를 최적화하거나 게시물 테이블에 대해서만 다른 쿼리를 사용합니다.

OPTIMIZE TABLE wp_posts;

그런 다음 이 줄을 wp-config에 추가하여 포스트/페이지 수정사항이 다시 누적되는 것을 방지할 수 있습니다.수정을 중지하려면 php:

define ('WP_POST_REVISIONS', FALSE);

또는 이 줄을 사용하여 유지할 수정사항 수를 선택합니다.

define('WP_POST_REVISIONS', 3);

MySQL 구성 파일에 액세스할 수 있는 경우 GitHub - major/MySQLTuner-perl과 같은 유틸리티를 사용하여 MySQL을 튜닝하여 성능을 향상시킬 수 있습니다.

공유 호스팅 환경에서는 블로그에 트래픽이 많아지기 시작하면 조만간 이러한 동작이 발생합니다. 언급한 세부 사항은 잘못 작성된 WordPress 플러그인과 관련이 있을 수 있습니다(성능을 위해 모든 플러그인이 WordPress 코어와 함께 업데이트되었는지 확인하십시오).

아직 WP Super Cache를 사용하지 않았다면 고려해 볼 수도 있습니다.

두 가지 선택지가 있습니다.

영구 연결은 사용 가능한 경우 MySQL 서버와 동일한 연결을 계속 사용하려고 합니다(PHP 요청 간에 연결이 닫히지 않음).

MySQL max_connections를 사용하면 서버에서 허용할 수 있는 연결의 양을 늘릴 수 있습니다.

워드프레스에 대해서는 잘 모르니 DB Perfect tuning 관점에서 생각해 보겠습니다.

먼저 업데이트가 왜 이렇게 오래 걸리는지 자세히 알고 싶습니다.DB의 인덱싱 전략을 조정해야 하는 잘못된 쿼리 계획이 있을 수 있습니다.

업데이트 속도를 높일 수 없고, 완전히 커밋되지 않은 데이터(예를 들어 블로그에서는 괜찮지만 회계 응용 프로그램은 아닌 데이터)를 읽을 수 있도록 조회할 의향이 있는 경우 업데이트에 대한 차단을 피하기 위해 SELECT를 NOLOCK 힌트를 포함하도록 변경할 수 있습니다.

자세한 내용은 이 SO 질문 참조

사용 중인 데이터베이스 연결이 너무 많을 경우(분명히) 너무 많은 데이터베이스 연결이 발생할 수 있습니다. 즉, 허용된 최대 연결보다 한 번에 사이트에서 쿼리를 실행하는 사람이 더 많을 수 있습니다.당신의 mysql 서버는 몇 개의 연결을 허용합니까?

mysql_pconnect()를 사용하고 계십니까 아니면 그냥 mysql_connect()를 사용하고 계십니까?전자를 사용하면 연결이 더 오랫동안 열려 있으므로 강제로 닫을 수 없습니다.

언급URL : https://stackoverflow.com/questions/3898252/what-can-cause-too-many-database-connections