워드프레스에서 페이지 로드, 양식 제출, 플러그인 작동 및 사용자 세션은 데이터베이스 쿼리를 포함합니다. 시간이 지나면서 데이터베이스는 오버헤드를 축적합니다: 오래된 게시물 수정본, 만료된 전환, 고아 메타데이터, 스팸 댓글 및 비활성화된 플러그인에서 사용되지 않는 테이블. 이러한 불필요한 데이터는 쿼리를 느리게 하고, 백업 크기를 증가시키며, 전체 사이트 성능을 저하시킵니다. 이 가이드는 데이터베이스의 불필요한 데이터를 식별하고, 안전하게 정리하며, 다시 발생하지 않도록 방지하는 방법을 다룹니다.
워드프레스가 데이터베이스에 저장하는 것
데이터베이스에 무엇이 저장되어 있는지 이해하면 안전하게 제거할 수 있는 항목을 식별하는 데 도움이 됩니다. 표준 워드프레스 설치는 12개의 핵심 테이블을 사용하며, 플러그인은 필요에 따라 자신의 테이블을 추가합니다.
| 테이블 | 저장 내용 | 일반적인 불필요한 데이터 출처 |
|---|---|---|
| wp_posts | 게시물, 페이지, 수정본, 첨부파일, 사용자 정의 게시물 유형 | 게시물 수정본, 자동 초안 |
| wp_postmeta | 게시물 메타데이터 (사용자 정의 필드, 플러그인 데이터) | 삭제된 게시물의 고아 메타 |
| wp_options | 사이트 설정, 플러그인 설정, 전환 | 만료된 전환, 오래된 플러그인 설정 |
| wp_comments | 댓글 및 트랙백 | 스팸 댓글, 삭제된 댓글 |
| wp_commentmeta | 댓글 메타데이터 | 삭제된 댓글의 Akismet 메타데이터 |
| wp_usermeta | 사용자 메타데이터 | 세션 토큰, 플러그인 사용자 데이터 |
| wp_termmeta | 카테고리 및 태그에 대한 메타데이터 | 고아 용어 메타데이터 |
데이터베이스 불필요한 데이터의 일반적인 출처
게시물 수정본
워드프레스는 게시물이나 페이지에서 "초안 저장" 또는 "업데이트"를 클릭할 때마다 수정본을 저장합니다. 50번 수정된 게시물은 wp_posts 테이블에 50개의 수정본이 저장되며, 각 수정본은 고유한 postmeta 항목 세트를 가집니다. 수백 개의 게시물이 있는 사이트에서는 수정본이 수천 개의 불필요한 데이터베이스 행을 차지할 수 있습니다.
전환
전환은 워드프레스 코어와 플러그인에 의해 wp_options 테이블에 저장되는 임시 데이터입니다. 이들은 만료 시간이 있지만, 워드프레스는 만료된 전환을 자동으로 삭제하지 않습니다. 시간이 지남에 따라 축적되어 옵션 테이블을 상당히 증가시킬 수 있으며, 특히 많은 플러그인이 있는 사이트에서 그렇습니다.
고아 데이터
게시물을 삭제하면 해당 메타데이터 (wp_postmeta 항목)가 삭제되지 않을 수 있습니다. 마찬가지로 댓글, 사용자 또는 용어를 삭제하면 고아 메타데이터 행이 남을 수 있습니다. 비활성화되거나 삭제된 플러그인은 종종 데이터베이스 테이블을 남겨두어 공간을 차지하고 데이터베이스를 어지럽힙니다.
스팸 및 삭제된 콘텐츠
스팸 댓글, 삭제된 게시물 및 삭제된 댓글은 수동으로 비워질 때까지 데이터베이스에 남아 있습니다. Akismet 또는 기타 스팸 필터가 있는 사이트는 주기적으로 정리가 필요한 수천 개의 스팸 댓글을 축적할 수 있습니다.
자동 초안
워드프레스는 게시물 편집기에서 "새로 추가"를 클릭할 때 자동 초안 게시물을 생성하며, 이를 게시하지 않더라도 생성됩니다. 이러한 초안은 시간이 지남에 따라 축적되며 편집 세션이 끝난 후에는 아무런 목적이 없습니다.
SQL을 통한 수동 데이터베이스 정리
SQL에 익숙한 사람들은 phpMyAdmin 또는 데이터베이스 클라이언트를 사용하여 직접 정리할 수 있습니다. 정리 쿼리를 실행하기 전에 항상 데이터베이스를 백업하십시오.
게시물 수정본 삭제
-- 모든 게시물 수정본 삭제
DELETE FROM wp_posts WHERE post_type = 'revision';
-- 고아 postmeta 삭제 (삭제된 게시물의 메타데이터)
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;
임시 데이터 정리
-- 만료된 임시 데이터 삭제
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();
-- 만료된 임시 데이터의 임시 데이터 삭제
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_%'
AND option_name NOT LIKE '%_transient_timeout_%';
스팸 및 휴지통 댓글 삭제
-- 스팸 댓글 삭제
DELETE FROM wp_comments WHERE comment_approved = 'spam';
-- 휴지통 댓글 삭제
DELETE FROM wp_comments WHERE comment_approved = 'trash';
-- 고아 댓글 메타데이터 삭제
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;
플러그인 기반 데이터베이스 정리
GUI 기반 접근 방식을 선호하는 경우, 여러 플러그인이 스케줄링 기능을 갖춘 데이터베이스 최적화를 처리합니다:
WP-Optimize
WP-Optimize는 수정본, 초안, 스팸, 임시 데이터 및 고아 데이터를 정리하는 무료 플러그인입니다. 또한 데이터베이스 테이블을 최적화하고 스케줄된 정리를 지원합니다. Pro 버전은 멀티사이트 지원 및 고급 스케줄링 기능을 추가합니다.
WP Rocket 데이터베이스 최적화
WP Rocket에는 수정본, 자동 초안, 휴지통에 있는 게시물, 스팸 댓글, 임시 데이터 및 테이블 최적화를 처리하는 데이터베이스 탭이 포함되어 있습니다. WP Rocket은 주로 캐싱 플러그인이므로 성능 최적화와 함께 데이터베이스 정리를 하나의 도구에서 수행할 수 있습니다.
고급 데이터베이스 클리너
이 플러그인은 비활성화된 플러그인에 의해 남겨진 테이블과 고아 크론 이벤트를 감지하여 더 깊이 들어갑니다. 테이블을 WordPress 코어, 플러그인 생성 또는 알 수 없는 것으로 분류하여 안전하게 제거할 수 있는 테이블을 식별하는 데 도움을 줍니다.
플러그인
무료 버전
스케줄 정리
테이블 감지
WP-Optimize
예
예
기본
WP Rocket
아니요 (프리미엄 전용)
예
아니요
고급 데이터베이스 클리너
예
Pro 전용
예 (상세)
wp-config.php 최적화
이 상수를 wp-config.php 파일에 추가하여 데이터베이스의 부풀어 오름을 방지하세요:
게시물 수정본 제한
// 게시물당 5개의 수정본만 유지 (권장)
define( 'WP_POST_REVISIONS', 5 );
// 수정본을 완전히 비활성화 (대부분의 사이트에 권장되지 않음)
define( 'WP_POST_REVISIONS', false );
수정본을 5로 설정하면 실수에서 복구할 수 있는 충분한 기록을 제공하면서 무제한 수정본 성장을 방지합니다. 콘텐츠가 많은 사이트에서 자주 수정하는 경우, 10개의 수정본이 합리적인 대안입니다.
휴지통 자동 비우기
// 7일마다 휴지통 비우기 (기본값은 30일)
define( 'EMPTY_TRASH_DAYS', 7 );
// 휴지통 비활성화 (항목이 즉시 삭제됨 - 주의해서 사용)
define( 'EMPTY_TRASH_DAYS', 0 );
자동 저장 간격
// 자동 저장 간격을 5분으로 늘리기 (기본값은 60초)
define( 'AUTOSAVE_INTERVAL', 300 );
데이터베이스 테이블 최적화
행을 삭제한 후, 단편화된 공간을 회수하기 위해 OPTIMIZE 작업을 실행하세요:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments, wp_commentmeta;
이 작업을 매달 또는 대규모 정리 작업 후에 예약하세요. 대부분의 정리 플러그인은 스케줄된 작업에 테이블 최적화를 포함합니다.
자동 정리 일정 설정
자동화된 일정을 설정하세요: 주간 임시 파일 및 스팸 정리, 월간 수정본 제거 및 테이블 최적화, 분기별 고아 플러그인 테이블 감사. WP-Optimize와 WP Rocket은 모두 예약된 정리를 지원합니다. 비혼잡 시간대에 구성하세요.
데이터베이스 크기 모니터링
데이터베이스 크기를 추적하여 부풀어 오르는 것을 조기에 발견하세요. 개별 테이블 크기를 확인하려면 이 쿼리를 실행하세요:
SELECT table_name AS '테이블',
ROUND(data_length / 1024 / 1024, 2) AS '데이터 (MB)',
table_rows AS '행 수'
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC
LIMIT 20;
wp_options가 5 MB를 초과하거나 wp_postmeta가 100 MB를 초과하면 정리할 때입니다. 이 테이블은 자주 쿼리되므로 크기가 페이지 로드 시간에 직접적인 영향을 미칩니다.
캐싱, 이미지 최적화 및 서버 구성과 함께 데이터베이스 최적화를 포함하는 포괄적인 성능 최적화 접근 방식을 위해 우리의 WordPress 속도 최적화 가이드를 읽어보세요. 유지 관리 루틴의 일환으로 지속적인 데이터베이스 건강을 위해 우리의 WordPress 유지 관리 가이드를 참조하세요.
자세한 내용은 공식 문서를 참조하세요: WordPress 데이터베이스 API.
자주 묻는 질문
데이터베이스에서 게시물 수정본을 삭제해도 안전한가요?
네, 게시물 수정본을 삭제하는 것은 안전하며 게시된 콘텐츠에 영향을 미치지 않습니다. 수정본은 초안 변경의 역사적 스냅샷입니다. 콘텐츠가 최종화되면 대부분의 사이트에서 수정본은 필요하지 않습니다. 그러나 정리를 수행하기 전에 항상 데이터베이스를 백업하세요.
데이터베이스 최적화가 사이트 속도를 눈에 띄게 개선할까요?
개선 정도는 데이터베이스의 부풀어 오른 정도에 따라 다릅니다. 50,000개 이상의 고아 행이나 10 MB를 초과하는 wp_options 테이블이 있는 사이트는 페이지 로드 시간과 관리자 대시보드 반응성에서 눈에 띄는 개선을 경험할 것입니다. 작은 사이트는 미미한 이득을 볼 수 있습니다. 데이터베이스 최적화는 캐싱 및 기타 성능 조치와 함께 작용하여 누적 개선을 이룹니다.
내 WordPress 데이터베이스를 얼마나 자주 최적화해야 하나요?
정기적인 콘텐츠 업데이트가 있는 활성 사이트의 경우 월간 최적화가 좋은 기준입니다. 댓글이 자주 달리거나 WooCommerce 거래, 양식 제출이 빈번한 고트래픽 사이트는 월간 테이블 최적화와 함께 주간 임시 파일 및 스팸 정리의 혜택을 볼 수 있습니다.
데이터베이스 정리 플러그인이 내 사이트를 망가뜨릴 수 있나요?
WP-Optimize 및 WP Rocket과 같은 신뢰할 수 있는 플러그인은 안전하도록 설계되었습니다. 이들은 알려진 부풀어 오른 범주(수정본, 임시 파일, 스팸)를 대상으로 하며 필수 데이터를 건드리지 않습니다. 플러그인 특정 테이블을 수동으로 삭제할 때 위험이 증가합니다. 테이블이 필요한지 확실하지 않은 경우, 제자리에 두고 먼저 그 목적을 조사하세요.
OPTIMIZE TABLE과 행 삭제의 차이는 무엇인가요?
행 삭제는 테이블에서 데이터를 제거합니다. OPTIMIZE TABLE은 행이 삭제된 후 테이블의 물리적 저장소를 재구성하여 디스크 공간을 회수하고 데이터 파일을 조각 모음합니다. 파일을 삭제하는 것(행 제거)과 하드 드라이브를 조각 모음하는 것(테이블 최적화)으로 생각하세요.
WordPress 테이블에 InnoDB 또는 MyISAM을 사용해야 하나요?
WordPress는 버전 5.5부터 기본적으로 InnoDB를 사용하며, 이는 권장되는 저장 엔진입니다. InnoDB는 행 수준 잠금을 지원하며(동시 사용자에게 더 좋음), 트랜잭션 및 충돌 복구 기능을 제공합니다. MyISAM은 읽기 중심 작업에서 더 빠르지만 이러한 신뢰성 기능이 부족합니다. 데이터베이스에서 MyISAM 테이블을 발견하면 일반적으로 InnoDB로 변환하는 것이 좋습니다.
비활성화된 플러그인이 남긴 테이블을 어떻게 식별하나요?
Advanced Database Cleaner 플러그인은 비핵심 테이블을 감지하고 분류할 수 있습니다. 또는 SQL 쿼리 SHOW TABLES를 실행하고 테이블 이름을 WordPress 핵심 테이블 및 현재 활성 플러그인과 비교하세요. 비활성화된 플러그인과 일치하는 접두사를 가진 테이블은 삭제 후보입니다.
WooCommerce가 상당한 데이터베이스 부풀림을 추가하나요?
네. WooCommerce는 주문 데이터, 제품 메타데이터, 고객 세션 및 활성 스토어에서 상당히 증가하는 임시 파일을 저장합니다. WooCommerce > 상태 > 도구를 사용하여 만료된 임시 파일과 세션을 정기적으로 지우세요.
모든 각도에서 성능 최적화
WP Rocket은 캐싱, 데이터베이스 정리 및 성능 최적화를 하나의 플러그인에서 처리하므로 사이트를 원활하게 운영할 수 있습니다.
WP Rocket 탐색하기 →



