Size söyledikleri gayet anlaşılır olmuş ama yine de biraz açalım.
Öncelikle LS Cache, nesne önbelleği veya birtakım hız eklentilerinin konuyla doğrudan alakası yok. İlgili sorun tamamen teknik düzeyde bir konudur yani karşı taraf API kullanarak ürünleri güncelliyor. Bu esnada aynı anda 100'den fazla işlem devreye giriyor. Bu process aşaması devam ederken MySQL-Server optimizesiz ve/veya yetersiz kaldığı için disk aşırı derecede zorlanıyor veya limitler yetersiz/yetkisiz kalıyor. Zorlanan disk de haliyle geç cevap veriyor.
MySQL sunucuda yüklü olan veritabanınınız hangi motoru (MyISAM veya InnoDB) kullanıyor? MyISAM kullanıyorsa veritabanı boyutu nedir? InnoDB kullanıyorsa MySQL-Server konfigürasyonu yapıldı mı? Yapıldıysa RAM için ne kadar kaynak ayırdınız? Örneğin tüm tabloları InnoDB kullandığınızı varsayalım. RAM 32GB olduğuna göre ayırmanız gereken kaynak 20-25GB (hesaplama şart) oluyor. InnoDB, MyISAM'e göre çok daha fazla RAM'e ihtiyaç duyuyor ve bunu sağlamazsanız böyle zorlanmalarda etkisiz kalır.
Nesne önbelleğinde hangi server'ı (Redis veya Memcached) kullanıyorsanız, RAM için ne kadar kaynak ayırdınız? Web sunucunuz OpenLiteSpeed böyle yüklü işlemlerde zorlanıyor olabilir veya limit yetersizliğinden ötürü cevap vermekte güçlü çekebilir ona da bakmak lazım. Bir de bahsettiğiniz VDS değil, VPS olması lazım çünkü bildiğim kadarıyla Hostinger'de VDS yok.
Aslında bütün bunlarla uğraşmak yerine daha makul şeyler yapılabilirdi. Tavsiyem, web-server'ı Nginx seçmeniz (ama iyi optimize ederek), ardından MySQL-Server optimizesi yapmanızdır. Yazılımda kullanmadığınız gereksiz şeyler varsa onları da kaldırmanızdır. Nginx hariç diğerlerini zaten yaptıysanız o zaman daha büyük bir sunucuya geçebilirsiniz ama dedicated yani fiziksel sunucuya geçmeniz lazım. İsterseniz epey memnun kalacağınız bir yer önerebilirim. Zaten böyle işlerle uğraşıyorsanız daha güçlü bir sunucuya geçmenizde fayda var.
Bir kere daha belirteyim, gelen geçen şu Redis'i öneriyor ama kimse konfigürasyondan bahsetmiyor. Redis düzgün yapılandırılmazsa RAM'den çok fazla yer. Hatta yanlış ayarlanırsa diskten yer yani gereksiz yere sunucu kaynaklarını tüketir. Aslında Redis ve Memcached veri giriş çıkışı çok yüksek sitelerde lazım. Örneğin, anlık 1000 kullanıcının girip işlem yaptığı bir websitesinde ideal olurlar.
Bellekleme olmadan çıkan sunucu yanıt süresi nedir ona bakmak lazım yani saf haliyle aldığınız yanıt nedir bakmanız gerekiyor. Bellekleme varken bunun tespit etmek mümkün değil ne yazık ki. İsterseniz bellekleme yapmadan kontrol edin bakalım ne çıkacak. Tatmin edici rakamlar çıkmazsa yazılımın da elden geçmesi gerekecektir.
Hostinger çok sağlam bir firmadır herkese öneririm ama 32GB RAM + 8vCPU yerine hiç değilse 16CPU verseler (veya seçilebilse) güzel olacak ama henüz o aşamaya geçmediler. Bu arada CPU fiziksel, vCPU sanal oluyor. Kısacası ciddi bir API işleminde sanal vCPU kullanmak yerine fiziksel kullanmak bu noktada daha makul olurdu ama bunlar en son düşünülecek şeyler.
Doğru diyorsunuz VPS olarak ifade etmem lazımdı. Ek olarak Cloudflare kullanıldığı detayını da eklemeyi unutmuşum. Sorduklarınıza gelecek olursak. 3 site var entegrasyon olmayanın database 912MB, diğer iki sitenin 230MB ve 136MB.
LS Cache'yi devredışı bırakıp entegrasyon üzerinden API ile stok güncelleme yaptım:
Method: PUT | Request: /wc/v2/products/3726 | Status: 200 | Elapsed Time: 1,169ms | Response Length: 21,695
LS Cache'yi etkinleştirip entegrasyon üzerinden aynı üründe stok güncelleme yaptım:
Method: PUT | Request: /wc/v2/products/3726 | Status: 200 | Elapsed Time: 1,221ms | Response Length: 21,695
MYSQL Server detayları şöyle:
10.6.20-MariaDB-log MariaDB Server
Veritabanı tabloları: InnoDB
/etc/my.cnf dosyası aşağıdaki gibi:
[mysqld]
max_allowed_packet=64M
local-infile=0
innodb_buffer_pool_size = 12G
innodb_buffer_pool_instances = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_io_capacity = 1000
innodb_io_capacity_max = 2000
query_cache_type = 0
query_cache_size = 0
max_connections = 500
thread_cache_size = 128
table_open_cache = 4000
max_allowed_packet = 16M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
socket=/var/lib/mysql/mysql.sock
/etc/redis/redis.conf içeriği:
maxmemory 4gb
maxmemory-policy allkeys-lru
/etc/sysctl.conf içeriği:
vm.swappiness=10
fs.file-max = 1000000
net.ipv4.tcp_fin_timeout = 15
net.core.netdev_max_backlog = 65536
php.ini sonundaki içerik:
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
post_max_size = 64M
upload_max_filesize = 32M
max_input_vars = 10000
date.timezone = Europe/Istanbul
expose_php = Off
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 16229
opcache.revalidate_freq = 0
opcache.fast_shutdown = 1
opcache.enable_cli = 1
opcache.jit = 1255
opcache.jit_buffer_size = 128M
wp-config.php içeriği:
define( 'WP_MEMORY_LIMIT', '1024M' );
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_TIMEOUT', 1);
define('WP_REDIS_READ_TIMEOUT', 1);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_PREFIX', 'alanadi_');