Categories: BackendPhp

Session Locking? Slow Query Log Isinya Query Session?

Masalah

Mekasnisme session default di php adalah locking/blocking. Misal ada 5 request dari orang yang sama (id session yang sama) bersaman yang menggunakan session, kelima request tersebut tidak bisa berjalan bersamaan, melainkan hanya satu request yang dapat berjalan, yang lainnya menunggu sampai request yang berjalan tersebut selesai (ngantri).

Hal ini tujuannya untuk mencegah race condition. Misalkan ada session variable bernama jk (jumlah keranjang) yang menghitung jumlah barang di keranajng. User menambah barang a dan b, awalnya jumlah keranjang ada 10, setelah ditambah 2 barang tersebut menajdi 12.

Sebenenrya hal ini tidak ada masalah karena delay waktu karena blocking/locking tidak signifikan. Namun jika dalam request tersebut ada query yang memakan waktu lama, efeknya akan berkali kali lipat lama nya.

Misalkan waktu setiap request adalah 0.5 detik. Dalam 1 halaman ada 5 ajax akan memakan waktu 2.5 detik. dan jika ada query lemot yang menyebabkan request selesai 4 detik, waktu halaman load akan menjadi 20 detik. Belum lagi webserver akan naik utilitasinya karena menerima banyak koneksi yang nganggur.

Solusi 0

Benerin query yang lain. Kalau dilihat di slow query log, yang kelihatan banyak adalah sesison locking. Tapi sebenernya session locking cuma kambing hitam saja. Kalau di telusuri lagi pasti ada sebab query yang bikin lemot, dan session locking membuat komplikasi penyakit lemot nya ini.

Solusi 1

https://stackoverflow.com/questions/3371474/php-sessions-is-there-any-way-to-disable-php-session-locking

https://ma.ttias.be/php-session-locking-prevent-sessions-blocking-in-requests/

Bisa dilihat diatas ada berbagai cara

  • Mengganti library yang non locking
  • Meunggunakan session_write_close di php (setelah memanggil itu session hanya bisa di baca, tidak bisa di update)
  • Menggunaakan redis karena tidak mempunyai mekanisme locking

Solusi 2

Namun menurut saya session locking sudah tidak relevan saat ini. Untuk fitur yang berpotensi menimbulkan race condition, bisa di lock menggunakan transaksi database, sehingga fitur lain nya tidak berpengaruh dengan locking

Herbert Abdillah

Recent Posts

Disk 1 tb sisa 100 gb

Berikut ini detail breakdown nya Docker

7 months ago

Langchain JsonOutputParser Invalid json output Error

Sometimes json output from llm like this : {"key": "value"}``` that langchain JsonOutputParser regex cant…

8 months ago

Tontonan Bagus

https://www.youtube.com/watch?v=ZAqIoDhornk (more…)

8 months ago

Ada Apa Didalam Sistem Operasi (Linux). Apa yang membedakan distribusi Linux seperti Ubuntu, Redhat, Alpine?

#include <stdio.h> int main() { FILE *f_ptr; char f_content[256]; char output[512]; f_ptr = fopen("/tmp/1337", "r");…

11 months ago

Convert OpenSSL 1 in Ruby Gem to OpenSSL 3

Version 3 have different interface Example: https://github.com/herbertabdillah/fabric-gateway-ruby/commit/c7377aaf2e62de1e2ac309965a09b5c7c72a2c7e (more…)

2 years ago

Catatan Belajar Ruby on Rails dari aliran Java dan Php

Telah di edit. Sumber Asli : https://twitter.com/nateberkopec/status/1250603032523370496/photo/1 Ruby on Rails merupakan framework web MVC menggunakan…

3 years ago