Poraďte vhodný hardware na server pro MySQL

alshajmr

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #45 kdy: 27. 02. 2018, 18:23:39 »
Když jsem si přečetl požadavky, tak něco podobného by mohlo vyhovovat i do budoucna:
https://www.czc.cz/dell-poweredge-t30-e3-1225v5-8gb-2x1tb_2/225109/produkt

Nedávno jsem "na hraní" kupoval tenhle. Jako bonus to dorazilo s E3-1270 v6, (ten v5 co je v popisku už Dell asi vůbec nedodá). K tomu se akorát dokoupilo 2x16GB paměti a iDRAC8 Enterprise licence z eBay za cca $35. (Pokud by chtěl něco podobného do racku, tak třeba R230, ale pokud to bude ležet někde v kanceláři na polici tak to asi není až tak dobrý nápad kvůli hluku.)

Na "mysql db pro cca 4 klientské win stanice, db má cca 500 MB" bych nějaké SSD absolutně neřešil, absurdní. Kdybych se chtěl rozšoupnout, tak k tomu koupím další 2x2TB SAS disky a udělám tam RAID-10.
Me se zase zda absurdni kupovat na 500MB databazi 2TB sas disky ... .


thcom

  • ***
  • 146
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #46 kdy: 27. 02. 2018, 18:30:15 »
Nečeká databáze na disky? Jestli občas chybí nějaký index, tak si možná vytváří pomocné soubory, které ukládá na disk... Pak by třeba stačilo tohle přesměrovat do tmpfs.

dle iotop to vypada ze mysqld hrabne na disk jenom sem tam obcas

Kit

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #47 kdy: 27. 02. 2018, 18:42:56 »
Podle názvu proměnné lock_id soudím, že aplikace nečeká na server, ale na druhého číšníka, který má tu databázi zamknutou pro sebe. Jak už bylo uvedeno výše, ta aplikace je blbě napsána. Databáze se nezamyká, pokud to není nezbytně nutné. Ten Synology by to hravě zvládl a nudil by se u toho.

Aby bylo jasno: Tohle by zvládlo i Arduino, ale za této situace ti nepomůže ani nadupaný Xeon. Oprav aplikaci.

j

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #48 kdy: 27. 02. 2018, 19:11:35 »
dle iotop to vypada ze mysqld hrabne na disk jenom sem tam obcas
Taky co bys tam chtel zapisovat ... i kdybys tech lidi mel 100, tak ti vygenerujou mozna s velkou davkou fantazie 1 update za sekundu.

Tzn v kazdym pripade vis, ze ti stacej dva libovolny SATA disky do zrcadla aby to nechciplo s mrtvym diskem. SSD nanic nepotrebujes.

thcom

  • ***
  • 146
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #49 kdy: 27. 02. 2018, 19:19:49 »
Podle názvu proměnné lock_id soudím, že aplikace nečeká na server, ale na druhého číšníka, který má tu databázi zamknutou pro sebe. Jak už bylo uvedeno výše, ta aplikace je blbě napsána. Databáze se nezamyká, pokud to není nezbytně nutné. Ten Synology by to hravě zvládl a nudil by se u toho.

Aby bylo jasno: Tohle by zvládlo i Arduino, ale za této situace ti nepomůže ani nadupaný Xeon. Oprav aplikaci.


nezamykam databazi pouze dany zaznam v tabulce ucty, doud neni editace hotova, dam do lock_id id stanice, na kterem se s ni pracuje

nedokazu si predstavit, jak to lze udelat jinak :(
« Poslední změna: 27. 02. 2018, 19:21:46 od thcom »


thcom

  • ***
  • 146
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #50 kdy: 27. 02. 2018, 19:22:22 »
dle iotop to vypada ze mysqld hrabne na disk jenom sem tam obcas
Taky co bys tam chtel zapisovat ... i kdybys tech lidi mel 100, tak ti vygenerujou mozna s velkou davkou fantazie 1 update za sekundu.

Tzn v kazdym pripade vis, ze ti stacej dva libovolny SATA disky do zrcadla aby to nechciplo s mrtvym diskem. SSD nanic nepotrebujes.

nechtel bych zapisovat nic, pouze jsem odpovidal na dotaz kolegy

thcom

  • ***
  • 146
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #51 kdy: 27. 02. 2018, 19:24:38 »
moje konfigurace mariaDB

Kód: [Vybrat]
# MariaDB database server configuration file.
#
# You can copy this file to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#
# * Fine Tuning
#
max_connections = 100
connect_timeout = 5
wait_timeout = 600
max_allowed_packet = 16M
thread_cache_size       = 128
sort_buffer_size = 4M
bulk_insert_buffer_size = 16M
tmp_table_size = 32M
max_heap_table_size = 32M
#
# * MyISAM
#
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched. On error, make copy and try a repair.
myisam_recover_options = BACKUP
key_buffer_size = 128M
#open-files-limit = 2000
table_open_cache = 400
myisam_sort_buffer_size = 512M
concurrent_insert = 2
read_buffer_size = 2M
read_rnd_buffer_size = 1M
#
# * Query Cache Configuration
#
# Cache only tiny result sets, so we can fit more in the query cache.
query_cache_limit = 128K
query_cache_size = 64M
# for more write intensive setups, set to DEMAND or OFF
#query_cache_type = DEMAND
#
# * wLogging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
# general_log_file        = /var/log/mysql/mysql.log
# general_log             = 1
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# we do want to know about network errors and such
log_warnings = 2
#
# Enable the slow query log to see queries with especially long duration
#slow_query_log[={0|1}]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time =
#log_slow_rate_limit = 1000
log_slow_verbosity = query_plan

#log-queries-not-using-indexes
#log_slow_admin_statements
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id = 1
#report_host = master1
#auto_increment_increment = 2
#auto_increment_offset = 1
#log_bin = /var/log/mysql/mariadb-bin
#log_bin_index = /var/log/mysql/mariadb-bin.index
# not fab for performance, but safer
#sync_binlog = 1
expire_logs_days = 10
max_binlog_size         = 100M
# slaves
#relay_log = /var/log/mysql/relay-bin
#relay_log_index = /var/log/mysql/relay-bin.index
#relay_log_info_file = /var/log/mysql/relay-bin.info
#log_slave_updates
#read_only
#
# If applications support it, this stricter sql_mode prevents some
# mistakes like inserting invalid dates etc.
#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
sql_mode =""
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
default_storage_engine = InnoDB
# you can't just change log file size, requires special procedure
#innodb_log_file_size = 50M
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

#
# * Galera-related settings
#
[galera]
# Mandatory settings
#wsrep_on=ON
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#
# Allow server to accept connections on all interfaces.
#
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completion

[isamchk]
key_buffer = 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

dustin

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #52 kdy: 27. 02. 2018, 20:13:51 »
nezamykam databazi pouze dany zaznam v tabulce ucty, doud neni editace hotova, dam do lock_id id stanice, na kterem se s ni pracuje

MyISAM neumí row locky, zamyká celou tabulku.

Citace
nedokazu si predstavit, jak to lze udelat jinak :(

Nejdříve bych přešel na innodb. Poté použil transakce. Zámky by možná vůbec nebyly potřeba. Navíc získáš kvalitní podporu spuštění/obnovy replikace pomocí XtraBackup.

dustin

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #53 kdy: 27. 02. 2018, 20:19:12 »
A ještě před přechodem na innodb nastavit file-per-table, ať je to rozdělené do více souborů.

thcom

  • ***
  • 146
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #54 kdy: 27. 02. 2018, 20:25:26 »
nezamykam databazi pouze dany zaznam v tabulce ucty, doud neni editace hotova, dam do lock_id id stanice, na kterem se s ni pracuje

MyISAM neumí row locky, zamyká celou tabulku.


tim lockem myslim to, ze kdzy jeden pingl otevre ucet tak do policka ucty.lock_id dam id stanice a kdyz ucet ulozi, tak dam SET lock_id = 0

pokud se ucet pokusi otevrit nekdo jiny, a lock_id <> 0 tak se zobrazi hlaska, ucet otevren na stanici baBlaBLA

tohle preci nezamkne celou tabulku, uz jenom proto ze bezne je na kazde stanici otevreny jiny ucet, mezitim se dalsi tiskne atd ...


k transakcim se priznam, jsem se jeste nedopracoval

chapu je tak, ze zavolam, begin transaction, neco se stane (blok prikazu) a potom bud commit nebo rollback

a chapu to jako ochranu celistvosti dane operace, bud se provede vse nebo nic z celeho bloku prikazu

nedovedu si predstavit jak resit kdyz na 2 stancichn otevrou stejny ucet a na kazde prida 2x gulas

v kuchyni nandaji 4x gulas a jsme v riti :(

ono totiz kdyz sectete ignoraci normoHosta blbost standartPingla a tupost OslaKuchare dstanete nebezpecne vybusny koktejl :-|

jinak presun na InnoDB chci zkustit na testovsaci DB doma mi to prislo rychlejsi

thcom

  • ***
  • 146
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #55 kdy: 27. 02. 2018, 20:28:56 »
A ještě před přechodem na innodb nastavit file-per-table, ať je to rozdělené do více souborů.

takto to zatim v /var/lib/mysql/popkladna mam

a doma se mi po prechodu z myISam na InnBD zmenila koncovky souboru z MYI na ibd tak snad se mi to uz neslouci ?

Kit

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #56 kdy: 27. 02. 2018, 20:53:05 »
A ještě před přechodem na innodb nastavit file-per-table, ať je to rozdělené do více souborů.

Nevidím k tomu žádný důvod, spíše naopak.

dustin

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #57 kdy: 27. 02. 2018, 21:53:08 »
https://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html

V novějších mysql/mariadb je to default.

Daleko raději pracuji s adresářovou strukturou, než s obřími soubory, které se při odstranění tabulky nezmenší. Někdy je vhodné db kopírovat rsyncem (např. na devel stroj) a tam je file per table hodně znát. Navíc na filesystému rovnou vidím, kolik v tabulce zabírají data, kolik indexy, nemusím to zjišťovat přes mysql klienta.

Někdo ale třeba potřebuje rychlé create/delete table, tak použije monolit ibdata.

j

Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #58 kdy: 27. 02. 2018, 22:47:50 »
....
tohle preci nezamkne celou tabulku, uz jenom proto ze bezne je na kazde stanici otevreny jiny ucet, mezitim se dalsi tiskne atd ...
...
Boze boze ....

Citace
117   kasa   10.0.0.72:49716   pokladna   Query   0   Waiting for table level lock   UPDATE ucty SET lock_id = 0 WHERE lock_id = 10   0.000
A co myslis, ze ti to prave tady rika ... ten update ceka, az se provede ten pod nim, a to naprosto zbytecne. A je to tak prave proto, ze mas uzamcenou celou tabulku, coz je v pripade jakykoli databaze stav, za ktery si tvurce aplikace zaslouzi viset ze kule.

Navic .. dalsi kravovina na tom je ta, ze mas ve where lock_id, ktery zaroven updatujes => i pokud na tom poli budes mit index, tak ho obratem rozbijes.

BTW: Transakce ani zdaleka nejsou jenom o tom, ze se udela vsechno nebo nic. Prave v prubehu transakce se napriklad overuje, zda se meneny zaznam zmenil. Pak na to lze reagovat, klidne i tak, ze se userovi rekne, ze tam bylo 0 gulasu, ale ted tam sou 2 a jestli prida ty svy 2 tak ze budou 4 OK/Storno.

ByCzech

  • *****
  • 1 824
    • Zobrazit profil
    • E-mail
Re:Poraďte vhodný hardware na server pro MySQL
« Odpověď #59 kdy: 28. 02. 2018, 05:07:48 »
Sleduji tohle téma od jeho začátku a pořád jsem přemýšlel, jestli se mám zúčastnit nebo ne, protože tazatel je tady už tak trochu známý tím, že o co méně věcem rozumí, o to více se do nich nadšeně pouští (nemyšleno nijak zle či útočně, prostě jen suché konstatování) a také proto, že mu postupně stejně někdo řekl něco podobného. Nicméně nakonec jak vidno jsem se rozhodl také přispět, snad to k něčemu bude...

1. Na potřebnou úlohu vystačí v podstatě jakýkoli běžný PC nejen dnešní, ale klidně pár let starý a bude se to po většinu času nudit a přitom to nemusí to být Xeon, Threadripper či EPYC v big toweru se SAS diskama, velkým množstvím RAM a kdo ví čím ještě - ovšem za předpokladu...

2.  ...že bude správně (jak tady kolegové už porůznu psali):

a) namodelovaná databáze (indexy, relace mezi tabulkama, transakce ap., a to raději ve výčtu nezmiňuji pokročilejší věci jako jsou pohledy, triggery, procedury, eventy...)

b) zvolený DB engine (ne takový, co neumí uzamknout konkrétní řádek v tabulce, ale jen celou tabulku a navíc relace "emuluje", protože neumí cizí klíče ap.)

c) udělaná aplikace (umět pracovat se zámky - což není to co děláš ty, že si vytváříš vlastní semafory o rozpracovaných datech - relacemi, indexy ap.)

...

nezamykam databazi pouze dany zaznam v tabulce ucty, doud neni editace hotova, dam do lock_id id stanice, na kterem se s ni pracuje

Ale ano, zamykáš, viz:

Kód: [Vybrat]
117 kasa 10.0.0.72:49716 pokladna Query 0 Waiting for table level lock UPDATE ucty SET lock_id = 0 WHERE lock_id = 10 0.000

bylo by fajn, kdyby sis to co ti vyplivlo sledování procesů v mysql aspoň pořádně přečetl, viz "...table level lock...", ale mám z tebe pocit, že máš nějakou selektivní slepotu, protože i když ti to napsali jasně posléze i jiní, tak ty pak přesto napíšeš něco takového:

nezamykam databazi pouze dany zaznam v tabulce ucty, doud neni editace hotova, dam do lock_id id stanice, na kterem se s ni pracuje

MyISAM neumí row locky, zamyká celou tabulku.


tim lockem myslim to, ze kdzy jeden pingl otevre ucet tak do policka ucty.lock_id dam id stanice a kdyz ucet ulozi, tak dam SET lock_id = 0

...možná by sis měl před tím, než něco napíšeš nastudovat něco k tomu, co ti ostatní radí, v tomto případě co je to zamykání v DB (a to tvé vyplňování políček s ID stanice to fakt není) a k tomu taky jak to funguje v Delphi, protože zjevně vůbec netušíš, že ti to v té aplikaci automaticky zamykají ty použité objektové komponenty pro práci s DB, které jsi v Delphi myší přetáhl do návrhu aplikace, aniž bys chápal, jak taková komponenta funguje a pracuje a jak ji pořádně ovládat a používat. Holt daň za "klikací" RAD.

A když vidím tohle:

nedokazu si predstavit, jak to lze udelat jinak :(

nebo

nedovedu si predstavit jak resit kdyz na 2 stancichn otevrou stejny ucet a na kazde prida 2x gulas

tak to dává tušit, jak asi ta aplikace a celé řešení vypadá...

ono totiz kdyz sectete ignoraci normoHosta blbost standartPingla a tupost OslaKuchare dstanete nebezpecne vybusny koktejl :-|

obzvlášť, když je tahle "rovnice" umocňována předváděnou neschopností řešitele, že?

Myslíš, že se nedá udělat relativně blbovzdorná aplikace, která vliv normoHosta, standardPingla a OslaKuchare sníží limitně k nule a nebude na to zároveň potřeba velmi nadstandardně vybavený HW?
« Poslední změna: 28. 02. 2018, 05:11:13 od ByCzech »