Mysql Database downtimes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daniel van Seggelen

Daniel van Seggelen

08/02/2021 08:53:21
Quote Anchor link
`Hallo,

Ik heb een dedicated server

64GB RAM

Nu heb ik een grote database met 70GB aan indexen.

Als ik de waarde van innodb_buffer_pool_size in /etc/my.cnf wil berekenen gebruiki ik:
Quote:
SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM (SELECT SUM(data_length+index_length) Total_InnoDB_Bytes FROM information_schema.tables WHERE engine='InnoDB') A;


Komt uit op 104

Dus dit is min my.cnf


Quote:
[mysqld]
performance_schema = ON
local-infile=1
skip-name-resolve

#join_buffer_size=2M
read_buffer_size=2M
tmp_table_size=1G
max_heap_table_size=1G
#sort_buffer_size = 2M
read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

innodb_buffer_pool_size=104G
innodb_log_file_size=512M
innodb_buffer_pool_instances=4
innodb_flush_log_at_trx_commit = 2
innodb_flush_method= O_DIRECT
max_allowed_packet=100M
open_files_limit=40000
default-storage-engine=InnoDB
innodb_file_per_table=1
#innodb-thread-concurrency=8
#innodb_lock_wait_timeout = 100
max_connections=200
query_cache_type=1
query_cache_size=50M
query_cache_limit=1G
# thread_concurrency= 32
thread_cache_size= 8
key_buffer_size=156M
#Slow Query Log
slow_query_log = ON
slow-query_log_file = /var/log/mysql-slow.log
long_query_time = 2
table_open_cache=3000
[mysqldump]
max_allowed_packet=4G


Ik krijg downtimes wanneer de cronjob word uitgevoerd die datafeeds van affiliate sites binnenhaalt.

Weet iemand wat er mis is met deze configuratie?
 
PHP hulp

PHP hulp

22/10/2021 18:10:41
 
- Ariën -
Beheerder

- Ariën -

08/02/2021 09:03:08
Quote Anchor link
Wat meldt de log?
Staat die niet aan, omdat ik hem niet tegenkom in je configuratie?

/var/log/mysql/mysql.log
 
Thom nvt

Thom nvt

08/02/2021 09:07:11
Quote Anchor link
Ik zou eens beginnen met een realistische hoeveelheid geheugen toewijzen, grote kans dat de out-of-memory (OOM) killer van het besturingssysteem de boel afschiet. (dat zou zichtbaar moeten zijn in je syslog of kernel log)
Innodb poolsize moet maximaal 80% van het beschikbare geheugen zijn (swapspace niet meegeteld):
Quote:
On a dedicated database server, you might set the buffer pool size to 80% of the machine's physical memory size. Be aware of the following potential issues when configuring buffer pool size, and be prepared to scale back the size of the buffer pool if necessary.

https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_buffer_pool_size
 
Daniel van Seggelen

Daniel van Seggelen

08/02/2021 11:04:05
Quote Anchor link
Er staat idd niks in deze log. waaraan zie je dat hij niet aan staat?

Quote:
slow_query_log = ON
slow-query_log_file = /var/log/mysql-slow.log


Ik lees dus uit andere bronnen dat deze size 1.6 x hde totale indexwaarde moet zijn.
En elders idd 80% van het RAM.

Ik denk idd dat ik het laatste zal instellen en weer eens proberen.

Maar waarom zie ik niks in de logs?
 
- Ariën -
Beheerder

- Ariën -

08/02/2021 11:14:37
Quote Anchor link
Slow log is wat anders dan de normale log.
 
Thom nvt

Thom nvt

08/02/2021 11:15:08
Quote Anchor link
Het slow_query_log gaat alleen over langzame queries, niet over de logging van de database engine (dat is meestal /var/log/mysql/mysql.log, zoals Ariën aangaf).
Ik denk dat in je /var/log/syslog (of /var/log/messages of journalctl -xe, afhankelijk van je distro en versie) of in /var/log/dmesg wel e.e.a. staat over het crashen/killen van de database engine.

Als het over het tweaken van dit soort parameters gaat moet je altijd eerst de x% (in dit geval 80%) van RAM aanhouden, dan pas de andere min/max waarden.
RAM is, ander dan CPU, een uitputbare resource. Er is niet meer te krijgen dan dat er is. Ga je meer claimen dan grijpt het OS in uit zelfbescherming en killt het proces wat zich misdraagt.
(n.b.: CPU kan natuurlijk ook "op" raken alleen gedraagt en manifesteert zich dat heel anders dan met RAM)
 
Daniel van Seggelen

Daniel van Seggelen

08/02/2021 11:32:02
Quote Anchor link
ahh,

Dus dit erbij zal de normale log moeten werken.

general_log_file = /var/log/mysql/mysql.log
general_log = 1
 
Thom nvt

Thom nvt

08/02/2021 11:34:47
Quote Anchor link
Dat zou inderdaad het normale log moeten inschakelen en wegschrijven naar /var/log/mysql/mysqld.log.
Zorg er wel voor dat de folder /var/log/mysql bestaat en dat daar de juiste group/owner en permissions op staan ingesteld (te vinden in de MySQL documentatie)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.