Skip to main content

Wrong Index slow down MySQL then kill Server

Bài này m note lại tình huống khi MySQL chiếm dụng CPU do query chậm. Query chậm do đánh Index sai (thừa) cho một bảng khá to cỡ x100K rows.
Trạng thái: - Server treo,
MySQL chiếm CPU -
Apache2 tầm 150 child process -
Swap đầy dần lên 70-80%

Thông số: VPS giá rẻ 500MB RAM, 1G Swap Traffic và website: ...

Quá trình khắc phục:
Đầu tiên soi MySQL, show processlist không thấy j (cái này phải đợi nó mới hiện ra).
Do show processlist ko có j nên quay ra search tunning
Apache mà cái này ít được can thiệp on-fly. Cuối cùng rất may trong 1 lần show processlist nữa thì thấy 1 đống log query đang chờ. => Do 1 bảng liên quan đến lượng view (khi view tăng) thì index nó mới lộ rõ bug. Sau khi xóa index thừa restart thì mọi việc có vẻ ok. Mysql vẫn chiếm CPU khá nhiều tầm 25-55% nhưng swap thì chỉ tầm 100MB/1000MB. Lỗi này xuất hiện 1-2 lần 1 ngày sau khi restart MySQL thì hết. Cho đến 1 hôm thì restart rất nhiều lần và vẫn đơ.

Cập nhật:
Tổng hợp sau khi theo dõi tiếp thì nguyên nhân chính vẫn là do code lởm. Khi lượng view tăng lên thì bảng views cũng tăng rows theo. Việc count view tính toán cho nhiều mục đích như trending ... sẽ tốn công hơn.
Ngoài ra nguyên nhân thứ 2 là site khá nặng về lượng ảnh nên mỗi lần load page của client tốn khá nhiều memory cho 1 apache process (or child process). cỡ 1.7 -> 2.5% RAM (~17 -> 25MB).
Như vậy chỉ với 100 user online lượng memory cần đã quá 1GB RAM (sau khi nâng cấp). Mặc dù swap chưa thấy động đến (có thể do caching) nhưng rõ ràng với tình trạng page load như vậy thì chỉ cần trên 200 user access đồng thời là oẳng.

=> Rõ ràng cần phải tunning apache + code.
- Code fix cứng để cho mysql tối giản (đã thử) và ok nhưng apache vẫn ngốn memory như cũ. Vì dù mysql có ko dùng thì apache vẫn dùng ngần đấy ram.


Ngoài ra là tunning js, css cũng rất khó chịu với font-awesome, bootstrap css jquery ...

Comments

Popular posts from this blog

AWS Elasticache Memcached connection

https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/accessing-elasticache.html#access-from-outside-aws http://hourlyapps.blogspot.com/2010/06/examples-of-memcached-commands.html Access memcached https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/GettingStarted.AuthorizeAccess.html Zip include hidden file https://stackoverflow.com/questions/12493206/zip-including-hidden-files phpmemcachedadmin ~ phpMyAdmin or phpPgAdmin ... telnet mycachecluster.eaogs8.0001.usw2.cache.amazonaws.com 11211 stats items stats cachedump 27 100 https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/VPCs.EC.html https://lzone.de/cheat-sheet/memcached VPC ID Security Group ID (sg-...) Cluster: The identifier for the cluster memcached1 Creation Time: The time (UTC) when the cluster was created January 9, 2019 at 11:47:16 AM UTC+7 Configuration Endpoint: The configuration endpoint of the cluster memcached1.ahgofe.cfg.usw1.cache.amazonaws.com:11211 St...

Notes Windows 10 Virtualbox config, PHP Storm Japanese, custom PHP, Apache build, Postgresql

 cmd => Ctrl + Shift + Enter mklink "C:\Users\HauNT\Videos\host3" "C:\Windows\System32\drivers\etc\hosts" https://www.quora.com/How-to-create-a-router-in-php https://serverfault.com/questions/225155/virtualbox-how-to-set-up-networking-so-both-host-and-guest-can-access-internet 1 NAT + 1 host only config https://unix.stackexchange.com/questions/115464/how-to-properly-set-up-2-network-interfaces-in-centos-running-in-virtualbox DEVICE=eth0 TYPE=Ethernet #BOOTPROTO=dhcp BOOTPROTO=none #IPADDR=10.9.11.246 #PREFIX=24 #GATEWAY=10.9.11.1 #IPV4_FAILURE_FATAL=yes #HWADDR=08:00:27:CC:AC:AC ONBOOT=yes NAME="System eth0" [root@localhost www]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 # Advanced Micro Devices, Inc. [AMD] 79c970 [PCnet32 LANCE] DEVICE=eth1 IPADDR=192.168.56.28 <= no eff => auto like DHCP #GATEWAY=192.168.56.1 #BOOTPROTO=dhcp BOOTPROTO=static <= no eff ONBOOT=yes HWADDR=08:00:27:b4:20:10 [root@localhost www]# ...

Rocket.Chat DB schema

_raix_push_notifications avatars.chunks avatars.files instances meteor_accounts_loginServiceConfiguration meteor_oauth_pendingCredentials meteor_oauth_pendingRequestTokens migrations rocketchat__trash rocketchat_cron_history rocketchat_custom_emoji rocketchat_custom_sounds rocketchat_import rocketchat_integration_history rocketchat_integrations rocketchat_livechat_custom_field rocketchat_livechat_department rocketchat_livechat_department_agents rocketchat_livechat_external_message rocketchat_livechat_inquiry rocketchat_livechat_office_hour rocketchat_livechat_page_visited rocketchat_livechat_trigger rocketchat_message rocketchat_oauth_apps rocketchat_oembed_cache rocketchat_permissions rocketchat_raw_imports rocketchat_reports rocketchat_roles rocketchat_room rocketchat_settings rocketchat_smarsh_history rocketchat_statistics rocketchat_subscription rocketchat_uploads system.indexes users usersSessions https://rocket.chat/docs/developer-guides/sc...