From: Sergey Anohin 2:5034/10.1 13 Jan 2021 17:18 +0200
To: Alex Korchmar <1187514814@ddt.demos.su>
Subject: InnoDB+UFS+SSD
Hello, Alex! SA>> Если для zfs нашел мануал где более менее все собpано в кучу AK> innodb_doublewrite=0 - вот с этим поаккуратней. Были сигналы - не чай он там AK> пьет! Как пишут: InnoDB использует метод потока файла, названный doublewrite. Перед записью страниц в файлы данных InnoDB сначала пишет их в непрерывную область, названную буфером doublewrite. Только после того, как запись и сброс к буферу doublewrite завершились, InnoDB пишет страницы к их надлежащим позициям в файле с данными. Если есть катастрофический отказ операционной системы, подсистемы хранения или процесса mysqld в середине записи страницы, InnoDB может позже найти хорошую копию страницы из буфера doublewrite во время восстановления катастрофического отказа. Хотя данные всегда пишутся дважды, буфер doublewrite не требует вдвое большего количества ввода/вывода. Данные написаны в буфер непосредственно как большой последовательный кусок одним вызовом fsync(). Чтобы выключить буфер doublewrite, определите опцию innodb_doublewrite=0 . AK> Правда, это про линуксы, у них и aio нарисованный, и вообще все через анус. Так ну типа если будет "катастрофический отказ операционной системы", что на говенном железе вполне может, печально будет, но правда это и про другие ручки можно сказать которые там крутятся ))) Ну тут имеется ввиду нормальные кейзы, так что статью принимать для себя имхо только с учетом своих условий. Ну и да там линукс. Хотя че говорить если в БСД уже Zol скоро будет наверно по дефолту :) С наилучшими пожеланиями, Sergey Anohin.
From: Alex Korchmar <1187514815@ddt.demos.su> 13 Jan 2021 16:20 +0200
To: Eugene Grosbein grosbein.net
Subject: InnoDB+UFS+SSD
From: Alex Korchmar Eugene Grosbein wrote: EG> Размер страницы InnoDB и размер блока UFS крайне желательно EG> иметь одинаковыми и изменить размер страницы однажды созданной базы InnoDB я, кстати, рекомендую еще разок перечитать вот это из найденной пострадавшим компилятивной доки: As discussed above, ZFS LZ4 compression is incredibly fast, so we should leave compression to ZFS and not use InnoDBs built in page compression. As an added benefit, leaving compression to ZFS doesnt disrupt the block alignment. Optimising the storage stack for 16KB writes and then using compression at InnoDB level would То есть, если не планируется делать чего-то совсем странного, про страдания с попаданием в page size можно смело забывать - это in-memory pages, при записи все будет пожамкано в непредсказуемый размер. Читается оно с prefetch, поэтому никто от этого особо не страдает. (Hо вот размер записи в логи - насколько я понимаю, фиксированный.) > Alex
From: Alex Korchmar <1187514814@ddt.demos.su> 13 Jan 2021 15:42 +0200
To: Sergey Anohin 2:5034/10.1
Subject: InnoDB+UFS+SSD
From: Alex Korchmar Sergey Anohin wrote: SA> Если для zfs нашел мануал где более менее все собpано в кучу innodb_doublewrite=0 - вот с этим поаккуратней. Были сигналы - не чай он там пьет! Правда, это про линуксы, у них и aio нарисованный, и вообще все через анус. Хотя через пару лет выбора уже не будет. > Alex
From: Sergey Anohin 2:5034/10.1 12 Jan 2021 11:32 +0200
To: Alex Korchmar <1187514813@ddt.demos.su>
Subject: InnoDB+UFS+SSD
Hello *Alex* *Korchmar* AK> в pазмеp стpаницы ты все pавно не попадешь, поэтому пофигу чего ты там AK> будешь делать. Бэкап делай. Если для zfs нашел мануал где более менее все собpано в кучу https://shatteredsilicon.net/blog/2020/06/05/mysql-mariadb-innodb-on-zfs/ Bye, Alex Korchmar, 12 янваpя 21
From: Sergey Anohin 2:5034/10.1 12 Jan 2021 11:10 +0200
To: Alex Korchmar <1187514813@ddt.demos.su>
Subject: InnoDB+UFS+SSD
Hello, Alex! AK> в размер страницы ты все равно не попадешь, поэтому пофигу чего ты там AK> будешь делать. Бэкап делай. xtrabackup трудится ночами, пока мускуль на zfs сидит провожу опыты с secondary/primary cache metadata С наилучшими пожеланиями, Sergey Anohin.
From: Sergey Anohin 2:5034/10.1 11 Jan 2021 13:55 +0200
To: Eugene Grosbein grosbein.net
Subject: InnoDB+UFS+SSD
Hello *Eugene* *Grosbein* SA>> То есть так сойдет: SA>> newfs -f 16k -U -t /dev/ada2p2 SA>> /dev/ada2p2: 60664.3MB (124240480 sectors) block size 32768, SA>> fragment size 16384 EG> Паpдон, newfs -b 16k, а не newfs -f 16k. Я уж доку полез поднимать (пpавда винтажную): bsize - пеpвоначальный pазмеp блоков для файлов файловой системы, выбиpаемый из 4096 (по умолчанию) или 8192; fragsize - наименьшее пpостpанство на диске, котоpое выделяется для файла. Значение должно быть степенью числа 2, выбpанное из диапазона от 512 до 8192. Значение по умолчанию 1024; :)) Коpоче так: newfs -b 16k -U -t /dev/ada2p2 /dev/ada2p2: 60664.3MB (124240480 sectors) block size 16384, fragment size 4096 using 211 cylinder groups of 288.67MB, 18475 blks, 36992 inodes. Купил сpаный китайский ссд, его не жалко, Device Model: SSD 128GB Serial Number: 202011090492 LU WWN Device Id: 0 000000 000000000 Firmware Version: FW200326 User Capacity: 128 035 676 160 bytes [128 GB] Sector Size: 512 bytes logical/physical Rotation Rate: Solid State Device Form Factor: 2.5 inches Device is: Not in smartctl database [for details use: -P showall] ATA Version is: ACS-2 T13/2015-D revision 3 SATA Version is: SATA 3.2, 6.0 Gb/s (current: 3.0 Gb/s) Local Time is: Mon Jan 11 13:43:29 2021 MSK SMART support is: Available - device has SMART capability. SMART support is: Enabled хочу посмотpеть с ним как две вещи будут pаботать. Половину диска скоpмил под кеш ZFS, половину под MySQL скоpмлю. # diskinfo -i -c -t /dev/ada2p1 /dev/ada2p1 512 # sectorsize 64424509440 # mediasize in bytes (60G) 125829120 # mediasize in sectors 0 # stripesize 20480 # stripeoffset 124830 # Cylinders according to firmware. 16 # Heads according to firmware. 63 # Sectors according to firmware. SSD 128GB # Disk descr. 202011090492 # Disk ident. Yes # TRIM/UNMAP support 0 # Rotation rate in RPM I/O command overhead: time to read 10MB block 1.434327 sec = 0.070 msec/sector time to read 20480 sectors 217.462525 sec = 10.618 msec/sector calculated command overhead = 10.548 msec/sector Seek times: Full stroke: 250 iter in 1.234495 sec = 4.938 msec Half stroke: 250 iter in 0.372980 sec = 1.492 msec Quarter stroke: 500 iter in 0.837252 sec = 1.675 msec Short forward: 400 iter in 3.022229 sec = 7.556 msec Short backward: 400 iter in 2.724871 sec = 6.812 msec Seq outer: 2048 iter in 12.909476 sec = 6.303 msec Seq inner: 2048 iter in 14.359088 sec = 7.011 msec Transfer rates: outside: 102400 kbytes in 3.272118 sec = 31295 kbytes/sec middle: 102400 kbytes in 3.279991 sec = 31220 kbytes/sec inside: 102400 kbytes in 1.620788 sec = 63179 kbytes/sec Asynchronous random reads: sectorsize: 1400 ops in 3.541322 sec = 395 IOPS 4 kbytes: 768 ops in 4.003832 sec = 192 IOPS 32 kbytes: 550 ops in 4.333299 sec = 127 IOPS 128 kbytes: 440 ops in 4.592614 sec = 96 IOPS (pts/1)[root@server:~]# diskinfo -i -c -t /dev/ada2p2 /dev/ada2p2 512 # sectorsize 63611125760 # mediasize in bytes (59G) 124240480 # mediasize in sectors 0 # stripesize 20480 # stripeoffset 123254 # Cylinders according to firmware. 16 # Heads according to firmware. 63 # Sectors according to firmware. SSD 128GB # Disk descr. 202011090492 # Disk ident. Yes # TRIM/UNMAP support 0 # Rotation rate in RPM I/O command overhead: time to read 10MB block 0.944074 sec = 0.046 msec/sector time to read 20480 sectors 129.552573 sec = 6.326 msec/sector calculated command overhead = 6.280 msec/sector Seek times: Full stroke: 250 iter in 0.159767 sec = 0.639 msec Half stroke: 250 iter in 0.481089 sec = 1.924 msec Quarter stroke: 500 iter in 0.688598 sec = 1.377 msec Short forward: 400 iter in 1.164975 sec = 2.912 msec Short backward: 400 iter in 0.571858 sec = 1.430 msec Seq outer: 2048 iter in 3.764968 sec = 1.838 msec Seq inner: 2048 iter in 3.252936 sec = 1.588 msec Transfer rates: outside: 102400 kbytes in 1.625704 sec = 62988 kbytes/sec middle: 102400 kbytes in 1.289498 sec = 79411 kbytes/sec inside: 102400 kbytes in 4.554813 sec = 22482 kbytes/sec Asynchronous random reads: sectorsize: 7408 ops in 3.070315 sec = 2413 IOPS 4 kbytes: 6611 ops in 3.058482 sec = 2162 IOPS 32 kbytes: 4511 ops in 3.442903 sec = 1310 IOPS 128 kbytes: 3295 ops in 3.180279 sec = 1036 IOPS Шпиндельный диск: # diskinfo -i -c -t /dev/ada3 /dev/ada3 512 # sectorsize 2000398934016 # mediasize in bytes (1.8T) 3907029168 # mediasize in sectors 4096 # stripesize 0 # stripeoffset 3876021 # Cylinders according to firmware. 16 # Heads according to firmware. 63 # Sectors according to firmware. TOSHIBA DT01ACA200 # Disk descr. 83EWYZ0KS # Disk ident. No # TRIM/UNMAP support 7200 # Rotation rate in RPM Not_Zoned # Zone Mode I/O command overhead: time to read 10MB block 0.820120 sec = 0.040 msec/sector time to read 20480 sectors 70.315131 sec = 3.433 msec/sector calculated command overhead = 3.393 msec/sector Seek times: Full stroke: 250 iter in 12.215429 sec = 48.862 msec Half stroke: 250 iter in 8.655560 sec = 34.622 msec Quarter stroke: 500 iter in 21.355126 sec = 42.710 msec Short forward: 400 iter in 15.620450 sec = 39.051 msec Short backward: 400 iter in 12.376752 sec = 30.942 msec Seq outer: 2048 iter in 8.641519 sec = 4.219 msec Seq inner: 2048 iter in 9.320166 sec = 4.551 msec Transfer rates: outside: 102400 kbytes in 13.106158 sec = 7813 kbytes/sec middle: 102400 kbytes in 13.921737 sec = 7355 kbytes/sec inside: 102400 kbytes in 23.852041 sec = 4293 kbytes/sec Asynchronous random reads: sectorsize: 515 ops in 3.979238 sec = 129 IOPS 4 kbytes: 475 ops in 4.062276 sec = 117 IOPS 32 kbytes: 468 ops in 4.099647 sec = 114 IOPS 128 kbytes: 425 ops in 4.470108 sec = 95 IOPS Bye, Eugene Grosbein, 11 янваpя 21
From: Eugene Grosbein grosbein.net 11 Jan 2021 15:40 +0200
To: Sergey Anohin 2:5034/10.1
Subject: InnoDB+UFS+SSD
11 янв. 2021, понедельник, в 09:15 NOVT, Sergey Anohin написал(а): EG>> то innodb_log_write_ahead_size нужно делать равным блоку UFS2. EG>> Поэтому либо делай newfs -f 16386 под дефолтный блок 16K InnoDB, SA> То есть так сойдет: SA> newfs -f 16k -U -t /dev/ada2p2 SA> /dev/ada2p2: 60664.3MB (124240480 sectors) block size 32768, fragment size SA> 16384 Пардон, newfs -b 16k, а не newfs -f 16k. Eugene -- For the Colonel's Lady an' Judy O'Grady Are sisters under their skins!
From: Sergey Anohin 2:5034/10.1 11 Jan 2021 09:15 +0200
To: Eugene Grosbein grosbein.net
Subject: InnoDB+UFS+SSD
Hello, Eugene! EG> Размер страницы InnoDB и размер блока UFS крайне желательно EG> иметь одинаковыми и изменить размер страницы однажды созданной базы InnoDB EG> нельзя, кроме как выгрузить все данные, пересоздать базу и загрузить EG> обратно. То же самое с UFS, так что размеры блоков нужно обдумать заранее. EG> Дефолтный размер блока UFS2 под FreeBSD нынче 32K (newfs -b). EG> Дефолтный размер страницы InnoDB (innodb_page_size) может зависеть EG> от версии базы, для MySQL 5.7 это 16K. А ещё в InnoDB есть EG> innodb_log_write_ahead_size, который не может превышать innodb_page_size, EG> но если ты всю требуху MySQL хранишь внутри /var/db/mysql на UFS2, Там пока zfs, на медленном диске, пока прибивать не буду сделаю локацию другую. Понапилено кастомизации: zroot/var/db 59,4G 1,34T 42,7G /var/db zroot/var/db/mysql 16,6G 1,34T 15,7G /var/db/mysql zroot/var/db/mysql/ibdata 657M 1,34T 657M /var/db/mysql/ibdata zroot/var/db/mysql/iblogs 328M 1,34T 328M /var/db/mysql/iblogs EG> то innodb_log_write_ahead_size нужно делать равным блоку UFS2. EG> Поэтому либо делай newfs -f 16386 под дефолтный блок 16K InnoDB, То есть так сойдет: newfs -f 16k -U -t /dev/ada2p2 /dev/ada2p2: 60664.3MB (124240480 sectors) block size 32768, fragment size 16384 EG> либо перед созданием базы в my.cnf пропиши innodb_page_size EG> и innodb_log_write_ahead_size равными блоку UFS2. EG> Это единственные вещи, которые сложно поменять потом, всё остальное EG> можно тюнить "на лету", если вдруг возникнет у тебя такая необходмость. EG> Может и не возникнуть. Ну проще ФС чем базу С наилучшими пожеланиями, Sergey Anohin.
From: Eugene Grosbein grosbein.net 10 Jan 2021 16:45 +0200
To: Sergey Anohin 2:5034/10.1
Subject: InnoDB+UFS+SSD
09 янв. 2021, суббота, в 16:18 NOVT, Sergey Anohin написал(а): SA> А скажите как в 21 веке тюнят сабж? SA> Hашел только это: Размер страницы InnoDB и размер блока UFS крайне желательно иметь одинаковыми и изменить размер страницы однажды созданной базы InnoDB нельзя, кроме как выгрузить все данные, пересоздать базу и загрузить обратно. То же самое с UFS, так что размеры блоков нужно обдумать заранее. Дефолтный размер блока UFS2 под FreeBSD нынче 32K (newfs -b). Дефолтный размер страницы InnoDB (innodb_page_size) может зависеть от версии базы, для MySQL 5.7 это 16K. А ещё в InnoDB есть innodb_log_write_ahead_size, который не может превышать innodb_page_size, но если ты всю требуху MySQL хранишь внутри /var/db/mysql на UFS2, то innodb_log_write_ahead_size нужно делать равным блоку UFS2. Поэтому либо делай newfs -f 16386 под дефолтный блок 16K InnoDB, либо перед созданием базы в my.cnf пропиши innodb_page_size и innodb_log_write_ahead_size равными блоку UFS2. Это единственные вещи, которые сложно поменять потом, всё остальное можно тюнить "на лету", если вдруг возникнет у тебя такая необходмость. Может и не возникнуть. Eugene -- Господа Действительного Положения Вещей предохраняют себя от голода своим богатством, от общественного мнения - тайной и анонимностью, от частной критики - законами против клеветы и тем, что средства связи находятся в их распоряжении. (Hорберт Винер)
From: Alex Korchmar <1187514813@ddt.demos.su> 10 Jan 2021 22:10 +0200
To: Sergey Anohin 2:5034/10.1
Subject: InnoDB+UFS+SSD
From: Alex Korchmar Sergey Anohin wrote: SA> Для фидо пойдет. для фидо пойдет пофиг как настроенное, что там от того фидо осталось-то? SA> У меня MariaDB, там веб-моpды база кpутится от фидо, хочу унести на SSD под SA> эхотагом. в размер страницы ты все равно не попадешь, поэтому пофигу чего ты там будешь делать. Бэкап делай. > Alex