Вход
testopay.com

PHP: ускорение базы данных за счёт сессий в памяти

k0ttee
Старожил

Сообщений: 588

Благодарности: 104

На форуме: с 22.03.21

12 мая 2021   17:38

Причина номер один в торможении сайта - запросы к базе данных. До 99% времени веб-приложение может простаивать, ожидая ответа от базы. Проекты с высокой посещаемостью, где пользователи входят и сидят, используют сессии. Сессии (из коробки) это файлы, а значит - между данными в базе и данными в сессии конкуренция за операции с диском.

 

В конфиге файловой системы /etc/fstab добавить диск в оперативке (размер по вкусу, для примера 64 мегабайта):

tmpfs /ramsessions tmpfs noatime,nodiratime,nodev,nosuid,size=64M 0 0

В конфиге инициализации /etc/php/8.0/fpm/php.ini сослаться на директорию хранения сессий:

session.save_path = "/ramsessions"

 

Как определиться с размером диска в памяти, чтобы его хватало? Вес файла сессии (наполненный данными) умножить на потолок обслуживаемых пользователей. На вскидку, скажу что для моего проекта 512 мегабайт хватит под 4 миллиарда пользователей.

k0ttee
Старожил

Сообщений: 588

Благодарности: 104

На форуме: с 22.03.21

18 мая 2021   12:34

Вкратце про использованные опции:

noatime - не писать для файлов дату последнего доступа (no access time)

nodiratime - то же самое для директорий/папок

nodev - не интерпретировать блокирование специальных устройств в файловой системе

nosuid - блокировать работу suid и sgid

 

Исторически появилось три способа сделать диск в памяти - ramdisk, ramfs, tmpfs. Почему tmpfs? По тому что самый современный и не имеет недостатков предшественников.

birds
Администратор

Сообщений: 649

Благодарности: 99

На форуме: с 02.03.20

21 мая 2021   10:58

[b]k0ttee[/b], как узнать тормозит база или нет? Кроме жестких случаев когда видно визуально))

k0ttee
Старожил

Сообщений: 588

Благодарности: 104

На форуме: с 22.03.21

22 мая 2021   23:41

[quote=birds]как узнать тормозит база или нет? Кроме жестких случаев когда видно визуально))[/quote]

Mysql не использую.