Adatbázis: SQL, XML DB

MySQL -> MariaDB lassulás

Sziasztok,

 

adott egy régi rendszer, Debian 8, MySQL 5, 2 db SATA diszken (Linux mdraid) az OS, és az egész LAMP stack. A gépben 8 CPU van és 8G RAM.

Van egy új rendszer, Debian 10, MariaDB 10, 2 db M2 SSD az OS-nek, és 2db M2 (Intel szerver) SSD a MariaDB-nek. Az SSD-k alatt van egy LSI HW raid vezérlő. A gépben 24 CPU van és 32G RAM.

Adott egy sql dump, ennek a betöltése a régi szerveren (különösebb tunnig nélkül, alapbeállításokkal):

real    17m2.267s
user    1m6.752s
sys     0m6.300s

Ugyanez az új gépen (tuning után):

real	28m12,458s
user	4m0,385s
sys	0m6,733s

Amit eddig módosítottam:

key_buffer_size        = 4096M
max_allowed_packet     = 32M
query_cache_size       = 128M
skip-log-bin
open-files-limit       = 65535
myisam_repair_threads  = 4
innodb-strict-mode     = 0

Ezek közül a myisam_repair_threads 4-re történő felemelése vitte le 32-35 percről a mostani 28-ra.

Mit lehetne/kellene még állítani, hogy legalább azt a szintet elérjük, amit a régi rendszer produkál? Az elvárás nyilván valami performancia javulás lenne, azaz gyorsabban töltődjön be a dump...

 

Köszi.

ISO 3166 magyarul

Tud valaki egy linket, ahol az ISO 3166-2 országkódok és a hozzájuk rendelt országnevek magyarul letölthetők mondjuk csv, xls vagy bármilyen formátumban? (A NAV ugyan megköveteli, de én nem találtam náluk ilyen linket, ahol ezt elérhetővé tenné.)

MEGOLDVA python datetime.now() to mysql datetime(6) == syntax error

A megoldas:

now = datetime.now()

formatted_date = now.strftime('%Y-%m-%d %H:%M:%S.%f')

mycursor.execute("INSERT INTO proba (datum) VALUES (%s)", (now.strftime('%Y-%m-%d %H:%M:%S.%f'),))
 

Sziasztok!

Kezdo vagyok mysql-ben, ezt szeretnem az elejen kijelenteni, hatha fontos lesz a kesobbiekben. :D

Van egy hazi projektem, ahol belefutottam az elso komoly problemaba...

 

Feladat:

Raspberry pi 4-en fut egy python script, ami adott beerkezo jelre keszit egy datetime.now() idot, ilyen formatumban: 2021-02-16 10:51:12.542145

Ezt az idot szeretnem elkuldeni egy tavoli mysql tablaba, de folyamatosan syntax error-ba futok bele.  Fontos, hogy szuksegem van a tizedes pont utani elso, de inkabb elso ketto karakterre(mar az elsonek is nagyon orulnek).

 

Vas amin a python fut: Raspberry pi 4 2GB model OS: Raspberry pi OS

Vas amin a mysql fut: Ubuntu 20.04.1LTS

 

Az adatok kuldes rendben van, ez a resze jo a kodnak, csak a datum helyes formatuma nem oke, gondolom en...(ha pl stringet kuldok az atmegy, ott a tabla datatype-ja varchar ebben az esetben)

 

A mysql maunalban az alabbi modon szerepel a datetime formatum:

Röviden: YYYY-MM-DD hh:mm:ss - tehat az en ertelmezesemben ebben a formaban kell hogy megkapja az erteket, hogy megfelelo legyen neki (ebben kernek egy megerositest)

 

Ahhoz hogy ebben a formaban kapja meg az ertekeket, ahhoz szinten a manual alapjan igy kell megkapnia:

Az altalam leirt pelda datumra nezve:

%Y -- ev 4 digites formaban (2021)

%m -- honap 2 digites formaban (02)

%d -- nap 2 digites (16)

%H -- ora 2 digites 0-23 (10)

%i -- perc 2 digites 0-59 (51)

%S -- masodperc 0-59 (12)

%f  -- microsec 000000-999999 (542145)

Ebben is jo lenne egy megerosites, hogy ezt kell-e kuldenem neki egyeltalan...

 

Fogom a mysql-t letrehozom az adatbazisban a tablat, a tablaban az oszlopot(ez az egy oszlop szerepel csak benne). Beallitom a DATETIME(6)-t, es keszen is vagyok. DATETIME(4)-re pl csak 2 digites lesz a tort resz --> 10:51:12.00

 

Jojjon a python script:

Letrehozom az aktualis idot a datetime.now()-al. Probaltam igy siman a datetime formatumaval is elkuldeni, de nem ment, ezert google alapjan ez az "ujra formazott" ido formatum elvben mukodik, igy ezzel probalkoztam ez lett a formatted_date valtozo. 

now = datetime.now()

formatted_date = now.strftime('%Y-%m-d %H:%M:%S.%f') --> ez ugye a pythonban levo formatum ez nem ismeri a mysql %i formatumat

Tehat, a fenti sorral az en ertelmezesem szerint eloallitottam a szukseges datumido formatumot. Ugye?

 

Jojjon a kuldes:

A teoriam az hogy definialom a mysql-nek hogy amit kapni fog, azt hogyan kell ertelmezni --> (%Y-%m-%d %H:%i:%S.%f)

mycursor.execute(INSERT INTO proba (datum) VALUES (%Y-%m-%d %H:%i:%S.%f)", (formatted_date)) --> ezzel syntax error van

mycursor.execute(INSERT INTO proba (datum) VALUES ('%Y-%m-%d %H:%i:%S.%f')", (formatted_date)) --> ezzel syntax error van, itt '' koze tettem a datum formatum jelolot, hogy "egy adatkent kezelje", de nem jott be

mycursor.execute(INSERT INTO proba (datum) VALUES", (formatted_date)) --> ezzel is syntax error van

mycursor.execute("INSERT INTO proba (datum) VALUES (localtime)") --> ez mukodik, de ez a mysql serveren futo idot keri le

mycursor.execute("INSERT INTO proba (datum) VALUES (datetime.now())") --> ezzel access denied error-al fut hibara, gondolom ez hasonloan a localtime-hoz a mysql server idejet kerne le

 

Mindenkeppen szuksegem van a tizedes reszbol 1 vagy 2 digitre, mert 1 masodperc alatt erkezhet 2-3 jel is, es most ebben az esetben a mysql hibara fut, hogy duplicate van. Mivel ugye csak ez ez egy oszlop van a tablaba, igy ez a primary key is abbol meg ugye nem lehet ketto vagy tobb egyforma. Csak ezert hogy mondjuk egy ID oszlopot betegyek hogy lehessen 2 vagy tobb azonos datumido nem szeretnek, illetve feleslegesnek tartom. 

 

Eros a gyanum, ha jol ertem a manual-t, akkor a megoldas itt van elottem, csak nincs meg a szintaktika, hogy hogyan kuldjem el a tablaba.

 

Szerk.:

Itt a hiba uzenet, hatha valakinek segit:

mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%Y-%m-%d %H:%i:%S.%f)' at line 1

 

A valaszokat elore is koszonom!

SQL bénázás

Van egy lekérdezésünk, ami összeszámolja adott kliens esetén, hogy melyik státuszban hányszor volt. Így néz ki:

SELECT client_id,status,COUNT(status) FROM cli_s GROUP BY status,client_id ORDER BY client_id,status;

Ez ad egy ilyen táblázatot:

+-----------+--------+---------------+
| client_id | status | count(status) |
+-----------+--------+---------------+
|       155 |      0 |            69 |
|       155 |     10 |             8 |
|       155 |     30 |             2 |
|       155 |     40 |             2 |
|      1100 |      0 |           158 |
|      1100 |     10 |            17 |
|      1100 |     30 |            16 |
+-----------+--------+---------------+

Ez helyett szeretnék valami tömörebbet, valahogy így:

+-----------+----------+-----------+-----------+-----------+-----------+
| client_id | count(0) | count(10) | count(20) | count(30) | count(40) |
+-----------+----------+-----------+-----------+-----------+-----------+
|       155 |       69 |         8 |         0 |         2 |         2 |
|      1100 |      158 |        17 |         0 |        16 |         0 |
+-----------+----------+-----------+-----------+-----------+-----------+

Ok, awk-val pillanatok alatt össze lehet dobni az átalakítást, de talán az SQL is tud ilyet.
A status csak a 0,10,20,30,40 számok valamelyike lehet.

 

mysql timestamp vs. nyári/téli időszámítás kezdő kérdés

Nem vagyok rutinos programozás, sql és időmérés témában sem:-) Kis hobbi projektben a problémám:

Egyszerű mysql tábla, az egyik mező timestamp. Python-ból tolnék bele utc-s időbélyegeket. A tavaszi óraállításkor, mikor 2:00-ról 3:00-ra ugrunk nekem vannak utc szerint köztes időpontok is, amit ilyen formában insert-elek pl: "2016-03-27 02:17:00"

De minden ilyen 2:00-3:00 közötti érték 2016.03.27 03:00:00 -val kerül be. Ha jól gondolom, UTC-ben nem kéne óraállításnak lenni, de lehet, hogy vannak fogalomzavaraim.

Erre van valami egyszerű megoldás? Köszönöm

MySql update egyik gépen nagyon lassú

Van egy update ami több mint 2 millió rekordot változtat meg. A fejlesztői gépemen olyan lassan fut, hogy ki sem bírom várni a végét. Egy órányi futás után kilövöm. Az egyik VPS-en meg 3 perc alatt lefut ugyanazon az adatbázison. 

Holott a fejlesztői gép jóval erősebb mint a VPS. Mi lehet ennek az oka? Egyáltalán hol kezdjek el keresgélni?

MSSQL VS LOCK_TIMEOUT

Sziasztok,

Nalam biztosan sokan sokkal jobban benne vannak az MSSQL -ben, a kerdesem az volna, hogy LOCK_TIMEOUT erteket egy DB szerveren, csak egy DB -re be lehet allitani?

A default ugye az, hogy a vegtelensegig lockolva marad, de ezt csak az egyik DB -n meg kene valtoztatnom.

 

Koszi!

MySQL TRIGGER OLD/NEW

Helló!

Van két táblám. Egyszerűség kedvéért

stock(id,stock,NOW()) 
trans(id,product_id,mennyiseg);

Azt szeretném, ha bármilyen SQL művelet van a trans táblán, akkor annak utolsó rekordjának az egyik mezeje alapján a stock táblába menjen egy REPLACE ahol eltárolom a termékhez tartozó aktuális készletet. Valamiért a NEW és az OLD rohadtul nem adódik át.
Mit rontok el?

 


CREATE TRIGGER trans_update
    AFTER UPDATE ON trans
    FOR EACH ROW 
    REPLACE INTO stock SET stock = (SELECT SUM(mennyiseg) as mennyiseg FROM trans WHERE product_id = 'OLD.product_id'), id = 'OLD.product_id';

CREATE TRIGGER trans_insert
    AFTER INSERT ON trans
    FOR EACH ROW 
    REPLACE INTO stock SET stock = (SELECT SUM(mennyiseg) as mennyiseg FROM trans WHERE product_id = 'NEW.product_id'), id = 'NEW.product_id';

    
CREATE TRIGGER trans_delete
    AFTER DELETE ON trans
    FOR EACH ROW 
    REPLACE INTO stock SET stock = (SELECT SUM(mennyiseg) as mennyiseg FROM trans WHERE product_id = 'OLD.product_id'), id = 'OLD.product_id';

Adatfeldolgozás segítség kérése

Van egy nyilvántartó program, amiből naponta kétszer töltök le egy-egy excel fájlt, a két időpont között új sorok keletkeznek a táblázatban az új sorok egy része már szerepel az előző táblázatban, csak bizonyos cellák tartalma változik, míg más sorok teljesen újak.

A feladat az, hogy meg kell nézni, hogy az előző állapothoz képest mennyi az olyan új sor ami még egyáltalán nem szerepel. Az eredmény egy szám hogy mennyi az új sor.

Az új sorokat hozzá kellene fűzni az előző táblázathoz, így az első táblázat folyamatosa bővülne.

A rendelkezésre álló szoftverek MS Office Excel és Access 2007.

Amit szeretnék, hogy az excel fájt megetetem az access-el, megcsináltatom az összehasonlítást és kapok egy számot, valamint egyéb lekérdezéseket is lefuttatok aminek az eredményéből grafikont készítettetek.

Mindezt úgy kellene megvalósítani, hogy egy adott könyvtárba bemásolva az új fájt és elindítva az access adatbázis fájt, automatikusan  felismerné, hogy van új fájl abból kiszedné az új sorokat és törölné, majd elvégezné az egyéb lekérdezéseket és frissítené a grafikonokat.

A gépen Windows 10 van, a szoftverek fixek, nem tudok telepíteni, esetleg ha van olyan ingyenes szoftver amivel a fenti dolog könnyebben megvalósítható rábírható a vezető, hogy telepítésre kerüljön.

Az access-ban az összehasonlítást meg tudom csinálni, meg a lekérdezéseket is le tudom futtatni, de mindezt úgy kellene megoldani, hogy ha én nem vagyok a kollégák is meg tudják csinálni.

HANA + AMD

Hala,

Váltanánk a sokéves vasunkról. Újabb SuSE Entrerprise Server + zsírúj HAHA is érkezik belátható időn belül, ezek miatt (is) felmerült, hogy vegyek új szervert. Egy AMD Epyc alapú HP szerver 1T -1.5T memóriával és 10x1.92T SSD-vel lenne a legvonzóbb, de nincs tapasztalatom AMD Zen szerverplatformon.

Kérdésem: fut valakinél memóriában ülő HANA kiszolgáló AMD vason? Milyen tapasztalatok vannak vele? Személyes tapasztalatokat kutatok, nem a google érdekel. Ha elköltök nettó 10+ miskát és valami nem úgy sül el ahogyan kellene, azért keresztre feszítenek - mármint engem :) ez ellen keresek valami mankót. Ha nem nyert az ötletem az is ok, úgy megyek tovább Intel vonalon.

Nagyon köszönöm!