Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

MySQL Bulk Insert - Par pitanja

[es] :: MySQL :: MySQL Bulk Insert - Par pitanja

[ Pregleda: 2036 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dzigilibonglica
NS

Član broj: 200040
Poruke: 294



+17 Profil

icon MySQL Bulk Insert - Par pitanja21.06.2011. u 19:10 - pre 156 meseci
Za početak radi se sledećem:
MySQL 5.1,na Ubuntu 11.04 64bita

VB Aplikacija u na windowsu čita red po red iz jedne tabele u Access-u, zatim obrađuje vrednosti svakog polja po nekom algoritmu, i na kraju te vrednosti insertuje u MySQL tabelu (InnoDB).
Insert jedan po jedan red traje sporo, pa me interesuje BULK INSERT. Ne transakcija cele tabele, import txt ili csv fajla, jer svako polje zaista moram isčitati i obraditi jedno po jedno pre upisa u MySQL tabelu.

Pitanja:
1) Da li je ovo Bulk insert?
Code:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);


2) Da li je ovo pod 1) brže od
Code:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3):
INSERT INTO tbl_name (a,b,c) VALUES(4,5,6);
INSERT INTO tbl_name (a,b,c) VALUES(7,8,9);


3) Da li postoje neka ograničenja, u smislu dužine SQL naredbe (stringa), ili možda broju redova koji se mogu insertovati od jednom?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL Bulk Insert - Par pitanja21.06.2011. u 19:30 - pre 156 meseci
za pocetak - ako tek razvijas aplikaciju INSTALIRAJ 5.5 MILION PUTA JE BOLJI OD 5.1 - posebno ako koristis windows

1. DA

2. DA, znacajno, obrati paznju na bulk_insert_buffer_size

3. DA - ogarnicenje je max_allowed_packet; max velicina tog upita mora da bude manja od toga


 
Odgovor na temu

dzigilibonglica
NS

Član broj: 200040
Poruke: 294



+17 Profil

icon Re: MySQL Bulk Insert - Par pitanja21.06.2011. u 20:07 - pre 156 meseci
Hvala na pomoći. Ne bi se baš reklo da "razvijam aplikaciju", ali da pojasnim:

Aplikacija koja sada radi nad bazom je privremena i služi samo da isčisti gomilu prljavih zapisa (stringova) iz Access baze i ugura ih u MySQL bazu,
i radi već dva dana po nekoliko sati (prvo isčita, pa očisti i na kraju upisuje), to joj je jedina svrha.

Aplikacija koja će na kraju koristiti MySQL bazu, tek treba da počne da se radi, za sada treba samo da se uguraju čisti podaci u 5.1 bazu, pa ću posle uraditi Dump baze u 5.5 (ako nije problem ).

Inače koristim 5.1 na Ubuntu 11.04, to sam već rekao u prvom postu, dakle nije Windows, na Windowsu je samo klijent aplikacija na LAN-u(nebitno).

E sad opet par pitanja, budući da sam početnik sa MySQL-om:

1) max_allowed_packet=16M, da li to znači da ceo upit ne treba da bude teži od 16MB, recimo TXT file od 16MB(tako da ga premerim)
2) bulk_insert_buffer_size mi je trenutno Disable-ovano, hoće li raditi bez toga, koji su benefiti i kojeg reda veličine je broj koji se unosi (bit, bajt, kilo,...mega nečega)?
3) Da li je 5.5 brži od 5.1 (InnoDB) na Linuxu 64 bita, ili bolji, sigurniji....
jer ako jeste bilo šta od ovoga, onda da menjam bazu? Stabilnost je najbitnija.

Pozdrav!

/edit: Da napomenem unosi se 5-6 miliona redova.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL Bulk Insert - Par pitanja21.06.2011. u 21:44 - pre 156 meseci
kao sto rekoh, tek si poceo, stavi odma 5.5 ... pomocices sebi znacajno .. i spasices sebi mnogo sati cupanja kose

(nebitno sto nije windoze server, nije ni ubuntu neko extra resenje, to je desktop os, nije namenjen bas za server )

Citat:
dzigilibonglica
1) max_allowed_packet=16M, da li to znači da ceo upit ne treba da bude teži od 16MB, recimo TXT file od 16MB(tako da ga premerim)


DA. inace povecaj tu vrednost. taj default je ostao od 3.23 verzije koja je 10 godina stara, dakle digni to slobodno na 512M

Citat:
dzigilibonglica
2) bulk_insert_buffer_size mi je trenutno Disable-ovano, hoće li raditi bez toga, koji su benefiti i kojeg reda veličine je broj koji se unosi (bit, bajt, kilo,...mega nečega)?

nije disableovan, samo je zakomentarisan konfig sto znaci da koristi default vrednost od 8M. Povecaj i to


Citat:
dzigilibonglica
3) Da li je 5.5 brži od 5.1 (InnoDB) na Linuxu 64 bita, ili bolji, sigurniji....
jer ako jeste bilo šta od ovoga, onda da menjam bazu? Stabilnost je najbitnija.

da, da i da.

Citat:
dzigilibonglica
Da napomenem unosi se 5-6 miliona redova.


posebno sada dok unosis te redove (bese u innodb?)

- naduvaj sve, digni max paket i bulk insert, ti imas samo jednu konekciju ka bazi tako da digni te vrednosti dosta
- ako je innodb - digni ozbiljno vrednost innodb_buffer_pool_size .. ne znam kakav ti je server ali ako je 64bitni linux znaci da imas bar 4G rama (ako imas manje onda ti je bolje da teras 32bita), za 4G rama stavi 2G u innodb_buffer_poo, stavi 256M max packet i 512M bulk insert buffer ... posle kad zavrsis to insertovanje prekonfigurisi taj server za "normalan rad" ...
- digni odma 5.5
 
Odgovor na temu

dzigilibonglica
NS

Član broj: 200040
Poruke: 294



+17 Profil

icon Re: MySQL Bulk Insert - Par pitanja21.06.2011. u 23:42 - pre 156 meseci
E to se zove pomoć!

Tako ću i da uradim:
Čitaću i obrađivati po jedno 10000 rekorda u RAM-u i onda tek slati "friziranom" MySQL-u odjednom u paketu, umesto da drljam jedan po jedan.
Posle ću ga vratiti u normalu kada bude išao na produkciju, 5.5 naravno!

HVALA PUNO!
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySQL Bulk Insert - Par pitanja22.06.2011. u 00:07 - pre 156 meseci
5.5 ce ti raditi brze i sigurnije i sada u ovom periodu tako da .. bolje predji odma na 5.5
 
Odgovor na temu

after
Ajvanho, ING

Član broj: 276962
Poruke: 97
*.dynamic.sbb.rs.



+6 Profil

icon Re: MySQL Bulk Insert - Par pitanja25.06.2011. u 13:38 - pre 156 meseci
Pomenuto je vec i verovatno je i ranije bilo vec price o tome. Pri insertu nekih 8 000 000 redova u tabelu javlja se greska:

"SQL state [HY000]; error code [1206]; The total number of locks exceeds the lock table size; nested exception is java.sql.SQLException: The total number of locks exceeds the lock table size"

Tabela je innodb i postavljanjem innodb_buffer_pool_size=256M u my.cnf problem je resen (server je CentOS sa 2Gb RAM). Default vrednost paramera je 8MB. Ako se koristi samo innodb vrednost innodb_buffer_pool_size moze da ide do 70% RAM. Ako se koristi i innodb i myisam onda ja stavljam i za innodb_buffer_pool_size i za key_buffer_size po 25% RAM.

Pozdrav
 
Odgovor na temu

[es] :: MySQL :: MySQL Bulk Insert - Par pitanja

[ Pregleda: 2036 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.