Discourse 커뮤니티 여러분, 안녕하세요!
최근 제 사이트가 기하급수적으로 성장하면서 Discourse 설치 환경의 성능을 향상시키고 정리하는 데 집중하고 있습니다.
두 가지 문제를 발견하여 여기에서 검색해 보았지만, 몇 가지 세부 사항에 대해서는 명확한 답변을 찾지 못했습니다. 따라서 이 글이 누군가에게 큰 부담이 되지 않기를 바랍니다.
첫 번째 문제는 DB(데이터베이스) 크기입니다. 크기가 꽤 큰 편입니다. Digital Ocean에서 4GB 메모리/80GB 디스크 인스턴스를 사용하고 있으며, 이미 DB가 디스크 용량을 압박하고 있습니다. 결국 이를 이동해야 할 것 같습니다(그렇다면 어떻게 해야 할까요?). 하지만 제가 무언가를 잘못하고 있을 수도 있습니다. Sam의 도움에 따라 아래 내용을 내보내어 확인하기 쉽게 했습니다:
table_name | row_estimate | table_size | index_size | total_size
--------------------------------------------------------------------------
post_timings | 155307152 | 8004 MB | 16 GB | 24 GB
posts | 2257277 | 2432 MB | 4810 MB | 7242 MB
post_search_data | 2279749 | 1992 MB | 769 MB | 2761 MB
user_actions | 6549714 | 570 MB | 2189 MB | 2759 MB
topic_views | 8843734 | 444 MB | 1494 MB | 1937 MB
user_visits | 569317 | 33 MB | 1892 MB | 1925 MB
notifications | 1482664 | 465 MB | 914 MB | 1379 MB
topic_users | 4821392 | 500 MB | 449 MB | 949 MB
top_topics | 47437 | 28 MB | 773 MB | 802 MB
user_auth_token_logs | 1690555 | 515 MB | 133 MB | 648 MB
post_actions | 1610428 | 145 MB | 367 MB | 512 MB
post_revisions | 113187 | 396 MB | 9312 kB | 406 MB
topic_links | 605525 | 135 MB | 254 MB | 389 MB
topics | 56970 | 104 MB | 227 MB | 331 MB
web_hook_events | 107760 | 295 MB | 10 MB | 306 MB
post_stats | 1955191 | 151 MB | 97 MB | 248 MB
directory_items | 13026 | 1312 kB | 157 MB | 158 MB
incoming_links | 812553 | 73 MB | 82 MB | 155 MB
post_replies | 1111686 | 69 MB | 71 MB | 139 MB
topic_link_clicks | 806821 | 54 MB | 43 MB | 97 MB
draft_sequences | 654989 | 36 MB | 48 MB | 84 MB
topic_search_data | 54056 | 40 MB | 24 MB | 65 MB
stylesheet_cache | 901 | 57 MB | 200 kB | 57 MB
user_profile_views | 204427 | 15 MB | 30 MB | 46 MB
quoted_posts | 223337 | 18 MB | 23 MB | 41 MB
poll_votes | 142349 | 13 MB | 20 MB | 32 MB
users | 2211 | 2360 kB | 29 MB | 32 MB
given_daily_likes | 252806 | 12 MB | 16 MB | 28 MB
scheduler_stats | 115081 | 17 MB | 4736 kB | 21 MB
user_histories | 30331 | 8848 kB | 10040 kB | 18 MB
reviewables | 16263 | 10032 kB | 8344 kB | 18 MB
optimized_images | 34463 | 8088 kB | 10 MB | 18 MB
post_uploads | 73123 | 4104 kB | 13 MB | 17 MB
uploads | 18897 | 5088 kB | 9080 kB | 14 MB
email_logs | 23224 | 4024 kB | 9960 kB | 14 MB
post_custom_fields | 11043 | 3192 kB | 9328 kB | 12 MB
search_logs | 68429 | 7480 kB | 4776 kB | 12 MB
user_badges | 37176 | 2920 kB | 5008 kB | 7928 kB
unsubscribe_keys | 14820 | 3352 kB | 4480 kB | 7832 kB
user_auth_tokens | 5328 | 2536 kB | 3608 kB | 6144 kB
reviewable_scores | 14681 | 3144 kB | 2768 kB | 5912 kB
reviewable_histories | 31482 | 2976 kB | 2616 kB | 5592 kB
poll_options | 20886 | 2560 kB | 2552 kB | 5112 kB
skipped_email_logs | 11164 | 2528 kB | 2328 kB | 4856 kB
topic_allowed_users | 21933 | 1424 kB | 1872 kB | 3296 kB
user_uploads | 19038 | 1040 kB | 1688 kB | 2728 kB
user_stats | 2211 | 1888 kB | 160 kB | 2048 kB
drafts | 1324 | 1424 kB | 368 kB | 1792 kB
user_custom_fields | 7467 | 688 kB | 1064 kB | 1752 kB
application_requests | 11244 | 792 kB | 528 kB | 1320 kB
topic_tags | 10257 | 696 kB | 528 kB | 1224 kB
user_associated_accounts | 670 | 1032 kB | 184 kB | 1216 kB
user_profiles | 2211 | 424 kB | 720 kB | 1144 kB
email_tokens | 3439 | 480 kB | 528 kB | 1008 kB
polls | 4030 | 520 kB | 408 kB | 928 kB
user_search_data | 2215 | 376 kB | 520 kB | 896 kB
topic_custom_fields | 2738 | 280 kB | 568 kB | 848 kB
group_users | 4364 | 344 kB | 448 kB | 792 kB
plugin_store_rows | 2090 | 488 kB | 296 kB | 784 kB
incoming_referers | 3779 | 352 kB | 424 kB | 776 kB
user_avatars | 2210 | 208 kB | 560 kB | 768 kB
web_crawler_requests | 1389 | 264 kB | 440 kB | 704 kB
group_histories | 2210 | 272 kB | 416 kB | 688 kB
user_emails | 2218 | 224 kB | 376 kB | 600 kB
user_archived_messages | 3019 | 240 kB | 232 kB | 472 kB
user_options | 2218 | 384 kB | 72 kB | 456 kB
topic_allowed_groups | 2098 | 128 kB | 216 kB | 344 kB
schema_migration_details | 994 | 192 kB | 88 kB | 280 kB
group_mentions | 933 | 104 kB | 152 kB | 256 kB
categories | 23 | 96 kB | 112 kB | 208 kB
google_user_infos | 314 | 136 kB | 72 kB | 208 kB
theme_fields | 24 | 168 kB | 32 kB | 200 kB
category_users | 569 | 64 kB | 136 kB | 200 kB
javascript_caches | 8 | 112 kB | 64 kB | 176 kB
incoming_domains | 701 | 80 kB | 96 kB | 176 kB
groups | 51 | 120 kB | 48 kB | 168 kB
category_tag_stats | 173 | 48 kB | 104 kB | 152 kB
tag_search_data | 109 | 64 kB | 72 kB | 136 kB
schema_migrations | 994 | 88 kB | 48 kB | 136 kB
topic_embeds | 218 | 80 kB | 56 kB | 136 kB
badges | 51 | 80 kB | 48 kB | 128 kB
translation_overrides | 170 | 72 kB | 48 kB | 120 kB
invites | 21 | 56 kB | 64 kB | 120 kB
user_api_keys | 4 | 48 kB | 64 kB | 112 kB
category_search_data | 20 | 48 kB | 64 kB | 112 kB
tags | 109 | 56 kB | 48 kB | 104 kB
screened_ip_addresses | 9 | 48 kB | 48 kB | 96 kB
user_second_factors | 26 | 48 kB | 48 kB | 96 kB
oauth2_user_infos | 4 | 48 kB | 48 kB | 96 kB
site_settings | 165 | 64 kB | 32 kB | 96 kB
api_keys | 1 | 48 kB | 48 kB | 96 kB
category_featured_topics | 123 | 48 kB | 48 kB | 96 kB
screened_emails | 4 | 48 kB | 48 kB | 96 kB
screened_urls | 1 | 48 kB | 48 kB | 96 kB
topic_groups | 245 | 56 kB | 32 kB | 88 kB
muted_users | 103 | 40 kB | 48 kB | 88 kB
tag_group_permissions | 11 | 40 kB | 48 kB | 88 kB
tag_users | 8 | 40 kB | 48 kB | 88 kB
child_themes | 6 | 40 kB | 48 kB | 88 kB
category_tags | 9 | 40 kB | 48 kB | 88 kB
topic_timers | 15 | 40 kB | 48 kB | 88 kB
ignored_users | 10 | 40 kB | 48 kB | 88 kB
group_requests | 0 | 24 kB | 64 kB | 88 kB
user_warnings | 7 | 40 kB | 48 kB | 88 kB
email_change_requests | 64 | 56 kB | 32 kB | 88 kB
web_hooks | 1 | 72 kB | 16 kB | 88 kB
custom_emojis | 132 | 56 kB | 32 kB | 88 kB
color_scheme_colors | 110 | 56 kB | 32 kB | 88 kB
tag_group_memberships | 192 | 48 kB | 32 kB | 80 kB
category_custom_fields | 17 | 48 kB | 32 kB | 80 kB
themes | 10 | 48 kB | 32 kB | 80 kB
badge_types | 3 | 48 kB | 32 kB | 80 kB
onceoff_logs | 39 | 48 kB | 32 kB | 80 kB
category_tag_groups | 8 | 40 kB | 32 kB | 72 kB
group_archived_messages | 56 | 40 kB | 32 kB | 72 kB
category_groups | 3 | 40 kB | 32 kB | 72 kB
push_subscriptions | 12 | 48 kB | 16 kB | 64 kB
tag_groups | 10 | 48 kB | 16 kB | 64 kB
theme_settings | 6 | 48 kB | 16 kB | 64 kB
ar_internal_metadata | 1 | 48 kB | 16 kB | 64 kB
backup_metadata | 6 | 48 kB | 16 kB | 64 kB
user_fields | 9 | 48 kB | 16 kB | 64 kB
remote_themes | 7 | 48 kB | 16 kB | 64 kB
badge_groupings | 5 | 48 kB | 16 kB | 64 kB
web_hook_event_types | 10 | 48 kB | 16 kB | 64 kB
user_security_keys | 0 | 8192 bytes | 56 kB | 64 kB
color_schemes | 11 | 48 kB | 16 kB | 64 kB
permalinks | 0 | 24 kB | 32 kB | 56 kB
incoming_emails | 0 | 8192 bytes | 48 kB | 56 kB
post_action_types | 8 | 40 kB | 16 kB | 56 kB
web_hook_event_types_hooks | 1 | 40 kB | 16 kB | 56 kB
watched_words | 0 | 24 kB | 32 kB | 56 kB
user_exports | 0 | 24 kB | 16 kB | 40 kB
github_user_infos | 0 | 8192 bytes | 24 kB | 32 kB
backup_draft_posts | 0 | 8192 bytes | 24 kB | 32 kB
categories_web_hooks | 0 | 16 kB | 16 kB | 32 kB
theme_translation_overrides | 0 | 8192 bytes | 24 kB | 32 kB
single_sign_on_records | 0 | 8192 bytes | 24 kB | 32 kB
post_reply_keys | 0 | 0 bytes | 24 kB | 24 kB
backup_draft_topics | 0 | 0 bytes | 24 kB | 24 kB
user_open_ids | 0 | 8192 bytes | 16 kB | 24 kB
post_details | 0 | 8192 bytes | 16 kB | 24 kB
message_bus | 0 | 8192 bytes | 16 kB | 24 kB
anonymous_users | 0 | 0 bytes | 24 kB | 24 kB
group_custom_fields | 0 | 8192 bytes | 16 kB | 24 kB
topic_invites | 0 | 0 bytes | 24 kB | 24 kB
shared_drafts | 0 | 0 bytes | 24 kB | 24 kB
instagram_user_infos | 0 | 8192 bytes | 8192 bytes | 16 kB
reviewable_claimed_topics | 0 | 0 bytes | 16 kB | 16 kB
user_field_options | 0 | 8192 bytes | 8192 bytes | 16 kB
embeddable_hosts | 0 | 8192 bytes | 8192 bytes | 16 kB
invited_groups | 0 | 0 bytes | 8192 bytes | 8192 bytes
developers | 0 | 0 bytes | 8192 bytes | 8192 bytes
tags_web_hooks | 0 | 0 bytes | 8192 bytes | 8192 bytes
groups_web_hooks | 0 | 0 bytes | 8192 bytes | 8192 bytes
badge_posts | 0 | 0 bytes | 0 bytes | 0 bytes
(한편, /var/discourse/shared/standalone/postgres_data/base 폴더는 47GB를 초과합니다)
어떤 방식으로든 줄일 수 있을까요? 아니면 특정 토픽의 크기를 고려하면 논리적인 수치인가요? (세부 사항은 아래에 있습니다.)
다른 문제는 아마도 관련이 있을 것 같으며, 바로 "극심한 부하로 인해, 모든 사용자에게 로그아웃된 사용자가 보는 것과 동일한 상태로 임시로 표시됩니다"라는 유명한 오류 메시지가 계속 표시되는 것입니다. 한 게시글에서 Unicorn Workers를 증가시키는 것이 옵션이 될 수 있다고 읽었습니다(솔직히 그 부분을 건드려 본 적이 없고, 전체 설치 환경을 위험에 빠뜨리지 않고 이를 수행하는 방법이나 실행 가능성이 어떻게 되는지 찾지 못했습니다). 참고로 10,000개 이상의 답변이 있는 토픽이 꽤 많습니다, 따라서 DB 크기와 성능 문제 사이에 상관관계가 있는 것일까요? (확신은 없으니 그저 제안을 던져 봅니다.)
동일한 인스턴스 내에서 최적화하는 방법(이것을 발견했습니다) 또는 HA 설치와 같은 다른 방법을 사용하는 것이 가능한지 궁금합니다(HA 설치가 지원되는지 모르겠습니다). 하지만 제 무지로 인해 조급하게 행동하고 있는 것 같습니다. 도움을 주실 수 있다면 감사하겠습니다.
참고로: 인스턴스가 작았을 때 스왑 파일을 사용했는데, 현재는 비활성화되어 있다고 생각합니다(이것을 확인할 방법이 있을까요?).
감사합니다. _초보적인 질문_을 해서 죄송합니다.
