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

Brisanje iz large table

[es] :: MySQL :: Brisanje iz large table

[ Pregleda: 1237 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

maroon984

Član broj: 284654
Poruke: 57
188.246.92.*



+1 Profil

icon Brisanje iz large table09.10.2011. u 22:34 - pre 152 meseci
Pozdrav,

kako najbezbolnije da obrišem odredjeni broj redova iz ogromne tabele, u koju će se (za vrijeme brisanja) upisivati i iz nje čitati?
Odsjecanje se vrši po opsegu datuma. Tabela je particionisana po datumu. Količina koja treba da se obriše je oko 25G.

Da li da radim sa procedurom? Ako da, da li da u query-ju naznačim cijeli vremenski interval, ili da radim postepeno?
 
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: Brisanje iz large table10.10.2011. u 12:07 - pre 152 meseci
najbolje je ako je particionisana kako valja da samo "alter table truncate partition" ( http://dev.mysql.com/doc/refman/5.5/en/alter-table.html )
 
Odgovor na temu

maroon984

Član broj: 284654
Poruke: 57
188.246.92.*



+1 Profil

icon Re: Brisanje iz large table10.10.2011. u 22:38 - pre 152 meseci
Particionisanje je uradjeno da valja, i "alter table truncate partition" fercera.
Kako da prebacim podatke iz te tabele u neku drugu (koju cu bekapovati i izbrisati)?
Nesto mi lose zvuci da puknem upit tipa

Code:
INSERT INTO tabela_bckp SELECT * FROM origin_tabela WHERE kolonaDatum BETWEEN neki-veliki-interval


neki-veliki-interval = nekoliko particija (particionisano je po mjesec dana).

Kontam da se kveri neće skoro izvršiti zbog količine podataka....
 
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: Brisanje iz large table10.10.2011. u 22:49 - pre 152 meseci
imas par resenja ali generalno to uopste nije tako lose resenje, jedino sto bi ti ja savetovao je da odradis particiju po particiju dakle da ti WHERE bude identicno kao definicija particije (proveri sa EXPLAIN PARTITIONS da li ti upit ide samo kroz jednu particiju) i da ti tabela_bckp bude myiusam i da nema nikakve indexe u sebi (posto ces da je koristis za bekap samo) .. onda i bekap mozes super brzo da uradis (sa mysqlhotbackup pokupis raw myisam fajl bez opterecivanja mysql servera) ... odradis particiju po particiju i bude super brzo bez velikih opterecenja ... ako imas mesta na ram disku (/dev/shm obicno) jos jace da kreiras mysam tabelu sa DATA DIRECTORY = '/put/do/ramdiska/' bez indexa (koji ce ti), onda odradis insert select u nju i bekapujes je sa hotbackup-om.

E sad, tako JA radim. Ono sto ljudi mnogo cesce praktikuju je da odrade SELECT INTO OUTFILE ... i to sacuvaju kao bekap ali ja nekako vise volim da imam raw fajl .. drugi opet vise vole human readable .. ovo sa SELECT INTO OUTFILE je lakse za skriptovanje i manje smara server no .. odluka je na tebi i na tome kako zelis da imas finalne podatke, posto ja bekap obicno pravim sa slave-a bas me briga za opterecenje
 
Odgovor na temu

maroon984

Član broj: 284654
Poruke: 57
*.teol.net.



+1 Profil

icon Re: Brisanje iz large table12.10.2011. u 10:43 - pre 152 meseci
...i sve bi bilo dobro da MySQL 5.1 (na produkciji, uskoro prelazimo na 5.5) podržava "alter table truncate partition".
Koliko bi bilo opterećenje da pustim DELETE sa intervalom u jednoj particiji, sa oko 9miliona zapisa, na serveru u koji se upisuje i čita? Innodb je u pitanju....
 
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: Brisanje iz large table12.10.2011. u 11:01 - pre 152 meseci
to je ogromna transakcija, opteretice server znacajno (redo log posebno). Posto ti to svejedno radis iz neke skripte, uzmes i napravis u petlji BEGIN; DELETE ... LIMIT 1000; COMMIT; i tako dok ih sve ne pobrises. Malo ce duze da traje nego jedan delete ali ce da znacajno manje smori server ..
 
Odgovor na temu

maroon984

Član broj: 284654
Poruke: 57
*.teol.net.



+1 Profil

icon Re: Brisanje iz large table18.10.2011. u 06:49 - pre 152 meseci
Da li bi nešto ovako valjalo u tijelu procedure :

Code:


BEGIN

DECLARE broj_poziva INT;
DECLARE i INT;
SET broj_poziva=ukupan broj redova / 1000 + 1;
SET i=1;

WHILE i<broj_poziva DO
     START TRANSACTION;
          DELETE FROM tabela WHERE vrijeme>='2010-07-01' AND vrijeme<'2010-08-01' ORDER BY vrijeme ASC LIMIT 1000;
     COMMIT;
     SET i=i+1;
END WHILE;

END

 
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: Brisanje iz large table18.10.2011. u 13:20 - pre 152 meseci
deluje ok
 
Odgovor na temu

[es] :: MySQL :: Brisanje iz large table

[ Pregleda: 1237 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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