từ khoá là mount ramdisk. ví dụ config của nginx có thư mục cache là /etc/nginx/cached thì dùng lệnh sau : trong quá trình sử dụng, dùng lệnh sau để biết tổng dung lượng cached là bao nhiêu: cached kiểu này, chỉ cần cache khoảng 5 phút thôi cũng giảm tải được rất nhiều cho server. Thực tế với các site không có user, không sử dụng cookie thì mình chỉ cần 1 lớp cached duy nhất kiểu này và không cần các lớp cached phía sau nữa. cũng khỏi lo tuning sql server làm gì.
với site như này thì nên cache TÔi không biết ông thớt dùng mã nguồn gì nhưng nên dùng cache query Redis cache chẳng hạn để hạn chế connect vào DB. Ngoài ra nếu cần thiết thì phải load balancer 2 3 máy chủ đằng sau giảm tải thì mới cân được. Cần thiết phải triển khai cluster MySql, master slave để đảm bảo đọc ghi không ảnh hưởng. Hạn chế tối đa connection đến DB để đảm bảo cho hệ thống ko bị nghẽn cổ chai, thường nó nghẽn ở DB là nhiều.
Để index hiệu quả thì phải xuất phát từ sql truy vấn của bạn hiện như nào. Vd như nếu bạn where name like %keyword% thì ko có cách nào index đc cả. 1tr records thì ko phải là quá nhiều, nếu tối ưu sql và đánh index phù hợp thì vẫn ok Như bạn mô tả thì mình đoán site bạn đang có nhiều slow query dẫn đến việc tăng connection => overload server Để cải thiện hiệu năng thì bạn có thể làm các việc sau: - Bật slowlog query trong mysql lên để biết sql nào đang chậm - Đánh index dựa vào các slow query đó - View xem Ram server còn nhiều ko, nếu còn nhiều thì cấp thêm cho mysql vì index đc lưu trong ram
đã từng ở đây e ơi http://cafemmo.club/threads/thao-lu...ginx-caching-reverse-proxy-with-caching.2400/
cap them ram the nao bac nhi ? sau khi xóa hết mấy cái thừa. thì tổng data thu về còn 15G à =)) máy mình hình như có 250G ram, ổ cứng thì 1T SSD M.2
Bạn mở file config của mysql ra (thường là /etc/my.cnf) tìm đến config sau và thay giá trị theo mong muốn Code: innodb_buffer_pool_size = 2G Có thể đọc thêm tại percona .com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation (tìm phần innodb_buffer_pool_size) Việc cấp thêm ram cho mysql chỉ là điều kiện cần, chủ yếu phụ thuộc vào index của bạn đang cover truy vấn sql như nào. Bật lưu log slowquery thì bạn config theo các param sau (cũng trong file /etc/my.cnf) Code: slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 10 Config xong thì restart lại mysql và run sql show global variables tìm đến các param trên xem mysql đã nhận chưa Con server này to thế =)), resource còn thừa đầy luôn kìa, mới dùng hết có 10% resource
Server của em còn dư sức nhiều lắm. Bị chậm khả năng là do code cùi rồi. Nên tập trung vào việc sửa code mới giải quyết triệt để chứ sửa config chỉ tạm thời thôi. Ở trên bạn @CSGO đã chỉ cách làm OK rồi, đó là cho database dùng innodb, còn đây là cái anh đang config cho database myISAM của 1 con VPS 16Gb RAM. Em check xem tương ứng bên innodb là gì thì sửa lại. Code: [mysqld] myisam_sort_buffer_size = 1024M myisam_sort_buffer_size = 1024M max_connections = 1024 sort_buffer_size = 1024M key_buffer_size = 1024M read_buffer_size = 1024M join_buffer_size = 1024M read_rnd_buffer_size = 1024M bulk_insert_buffer_size = 1024M thread_concurrency = 16 tmp_table_size = 1024M max_heap_table_size = 1024M max_allowed_packet = 512M query_cache_limit = 64M query_cache_size = 1024M connect_timeout = 60 thread_cache_size = 32
sau khi làm theo #CSGO và A #money chỉ bảo Cám ơn các bác đã nhiệt tình tư vấn mình tăng lên innodb_buffer_pool_size = 30G VÀ cấu hình thấp hơn a money tí xem sao hay vi để 1024M thì mình để còn 512M thì sv có vẻ giảm đáng kể
CPU vẫn cao như kia thì bạn nên check thêm slowlog xem sql nào đang ngốn, nếu có slowsql thì nên đánh index để tối ưu hơn. Nếu bạn không rành cách đánh index thì post sql lên đây hc inbox mình mình support
À site mình vẫn còn 1 phần chưa cache Ví dụ lịch sử xem bài Rồi mục theo dõi bài viết khi có comment mới or content mới
Vl thật. Cái browsing history, nếu bình thường, người ta chỉ dùng cookie để lưu vì nó cũng ko có gì quan trọng. Em chơi cache lại thì khả năng là code lưu xuống db luôn à? Bởi vậy anh nhắc lại cách tối ưu tốt nhất là phải check code chứ mò mò thế này càng mò càng thấy lắm thứ lòi ra.
đúng rồi a cái này e lưu theo user. tức họ có tk thì lưu vào tk. mỗi tk 50 bài đã xem. ko có tk thì lưu vào trình duyệt
Trước mình cũng bị y vậy vì table khá to khoảng 20tr record, phần giống comments của thớt lên tới 800tr. Nâng cấp server kiểu gì cũng k đc. Sau đó mới bỏ công tách phần 800tr kia qua mongo viết api bằng node. Tối ưu lại mysql config. Và cuối cùng tối ưu toàn bộ code lại. Tại mình chạy rất nhiều thứ python, php, node, redis, queue.. nên hơn vất vả trong lúc tối ưu code. Nhung h chỉ cần con server 8core/16threads 32gb ram chạy ổn vừa nhanh vừa tiết kiệm chi phí.
Không đáng để làm em ạ. Em đang đi xe đạp và bị chậm. Thay vì chuyển sang đi xe máy, xe hơi, máy bay, ... thì em lại chọn cách mua cái xe đạp xịn hơn để đạp và hi vọng nó nhanh hơn.
a ơi giúp e phát nữa nhé trong code cần lưu ý gì a nhỉ ? các truy vấn 100% e cache cả rồi - danh mục hay top bài viết -> cache theo Object ra html từng phần (tranh tình trang for liên tục cho từng user) ($this->cache->save($namecache, $query, 2 * 60 * 60) - sản phẩm thì cache database -> tại còn thời gian update. ($this->db->cache_on() dùng cái này) e code bằng codeigniter nhưng ko hiểu sao 2 tháng này bị lỗi. dù CPU chỉ chiếm 10% server (server này 100% code php) thì e bị tình trang là cứ kiểu 5% ng dùng vào sẽ bị lỗi ko kết nối được dữ liệu. (mặc dù đã cache full page rồi) chỉ cần f5 lại là vào dc nhưng cái này là lỗi chắc rồi mà ko biết tìm ra rồi fix sao user ko tăng, site load bt ko chậm đi mà chả hiểu sao lỗi
Với CI, cookie / session nó làm việc ko tốt, đã lưu cookie mà còn log vào db. Nếu trang bị request thì table cookie của nó phồng lên dzữ lắm! Tốt nhất bạn nên dùng cookie / session riêng. Tách ra và kết hợp với ajax. Nếu được thì bạn post file controller đó lên để anh, em thảo luận thêm, chứ như vầy thì khó gãy đúng chỗ!
Anh ko xài codeigniter cũng ko mò vào code của em thì chịu ko đoán dc bệnh Riêng cái vụ “chỉ cần f5 là vào dc” thì em có thể fix tạm bằng auto refresh khi lỗi xem có được không rồi từ từ tìm nguyên nhân chính xác sau.
mà rõ khổ là đã cache rồi. thì nó còn check lại mysql làm gì nhỉ e nghĩ nó check lại nên mới die vầy. mà chả hiểu sao die. khi server data chạy có 4-5% cpu còn server code chạy có 10% cpu site load nhanh bình thường chỉ lỗi thôi