Autor |
Sõnum |
obundra
Vana Pingviin
Vanus: 49
Liitunud: 04.08.2005
Postitused: 1213
Asukoht: 127.0.0.1
Distributsioon: RHEL, Solaris, Debian, Gentoo
|
|
|
|
chris
Pingviini aktivist
Liitunud: 16.02.2009
Postitused: 146
Asukoht: Tallinn
Distributsioon: Debian 6.0/7.0
|
|
Kraapisin oma teadmised SQL-st kokku ja hakkasin mõtlema, kuidas päringut kiirendada.
Ühe variandina suutsin kirja panna selle:
Kood: | SELECT DISTINCT userid AS peer, COUNT(torrent) AS count
FROM peers
WHERE seeder = "yes"
GROUP BY peer; |
Ma ei pane pead pakule, et see võiks olla kiirem või õigem.
Täiesti võimalik, et tegemist on totaalse jamaga. Lubada julgen ainult seda, et baasist ridu see kustutama ei hakka.
|
|
|
|
|
|
|
|
-IFFI-
Vana Pingviin
Vanus: 48
Liitunud: 25.06.2005
Postitused: 1411
Asukoht: Lappeenranta-Turku
Distributsioon: Linux MX
|
|
Nii, asi tunudb pea aegu olevat nuid OK. Lülitasin webminis valiku Separate file for each InnoDB table? YES (ennem oli NO) ning peale seda nuid 2 päevajooksul on seda kohati ettetulevat serveri kokkujooksmist või lagi jäänud tõsiselt harvemaks. Vast tunnis korra tuleb ette.
Sain ka vihjeid teatud scriptile/koodi jupile mis võib seda põhjustada. Proovin nüüd selle veel ülevaadata ja kas see siis lahendab täielikult probleemi.
Igaljuhul tänan ma hetkel kõiki kes jagasid oma teadmisi minuga.
Keegi tore tegelane võiks muidugi mulle lambale ära seletada mida see Separate file for each InnoDB table? valik teeb/muudab databasis. Omal pole õrna aimugi sellest.
|
|
|
|
|
|
|
|
chris
Pingviini aktivist
Liitunud: 16.02.2009
Postitused: 146
Asukoht: Tallinn
Distributsioon: Debian 6.0/7.0
|
|
|
|
-IFFI-
Vana Pingviin
Vanus: 48
Liitunud: 25.06.2005
Postitused: 1411
Asukoht: Lappeenranta-Turku
Distributsioon: Linux MX
|
|
Täänks ja ilus kena kõik lingid aga see english ei ole just kõige tugevam pool ning google translatoriga lääb asi suht segaseks.
Oleks soovinud lühidat maakeelset kokkuvõtliku ülevaadet
|
|
|
|
|
|
|
|
chris
Pingviini aktivist
Liitunud: 16.02.2009
Postitused: 146
Asukoht: Tallinn
Distributsioon: Debian 6.0/7.0
|
|
Mulle tundus kuidagi võimatu, et inglise keel on tundmatu. Proovin siis teha väikese kokkuvõtte võttes aluseks ülaltoodud lehed.
MySQL 5.x oskab kasutada üsna mitut nn. salvestusmootorit. Salvestusmootor on teek, mis tegeleb andmete paigutamisega andmekandjale ja nende välja lugemisega. Teadlikult või teadmatult kasutad sa ennekõige järgmiseid mootoreid:
* MyISAM, mis oli vaikimisi mootor kuni v5.5-ni, kui kompileerimisel või konfifailis ei ole teisiti öeldud. Plussideks on väiksem kettakasutus, miinuseks kesine kiirus kirutamisel ja lugemisel korraga ning transaktsioonide toe puudumine.
* InnoDB on uus vaikimis mootor. Toetab transaktsioone, täpsemat lukustamist, kuid samas tahab rohkem resursse. Mõned statistilised parameetrid võivad InnoDB-ga olla väga mööda. Nt. ridade arv võis tegelikust erineda 40-50% (täpse tulemuse annab "select count (field) from table;").
* Memory, mida kasutatakse mälus olevate tabelite hoidmiseks.
Mootoreid on veel; huvitatud isik klikib lingil http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html
Ennist jäi teadlikult mainimata veel üks InnoDB ja MyISAM'i erinevus: InnoDB mootor hoiab kõik andmebaasi tabelid kettal ühes failis nagu nt. SQLite või M$ Access; MyISAM loob aga iga tabeli jaoks kolm faili (tabeli kirjeldus - *.frm, salvestatud andmed - *.MYD ja indeksid - *.MYI).
InnoDB salvestab laias laastus nelja tüüpi andmeid:
* tabelite (andmete) kirjeldused
* tabelites salvestatud andmed
* tabelite juurde kuuluvad indeksid
* mitmeversioonilise paralleelse halduse andmed, mis on muuhulgas
- transaktsioonide rollback segmendid
- tagasivõtmise puhvrid
- topelt kirjutamise puhvrid
- lisamispuhver
Kui jätta kõrvale tabelite kirjeldused, mis istuvad ikka veel eraldi .frm failis, siis kõik ülejäänud asjad istub kõikide andmebaaside jaoks, mis on valinud salvestusmeetodiks InnoDB, ühes failis - ibdata1.
Tagasi probleemi juurde. Miks jääb üks fail aeglaseks? Sest vahel on failisüsteem. Ibdata1 üritab asendada otsepöördusega salvestusmeediat. Kui andmeid on palju, siis paisub fail suureks ja kipub fragmenteeruma. Seega on parim vastus küsimusele "kuidas andmebaas kiireks saada?" pane andmed eraldi kettale, mida kasutab ainult andmebaasi mootor otse, ilma failisüsteemita.
Alati ei ole aga eraldi ketta (pigem RAID-5/6/1+0 kettamassiivi) eraldamine võimalik. Sellisel juhul tasub proovida eri tüüpi andmete eraldamist - panna kõik tabelid eraldi failidesse (laiend .ibd) nagu seda teeb MyISAM. Metaandmed jäävad faili ibdata1 edasi; neid liigutada ei saa. Võimalik on aga liigutada üksikuid tabeleid erinevatele andmekandjatele.
|
|
|
|
|
|
|
|
sander85
Vana Pingviin
Vanus: 39
Liitunud: 08.08.2005
Postitused: 4359
Asukoht: Tallinn (vahel ka Virtsu)
Distributsioon: Mageia, Debian, CentOS
|
|
-IFFI- kirjutas: | Nii, asi tunudb pea aegu olevat nuid OK. Lülitasin webminis valiku Separate file for each InnoDB table? YES (ennem oli NO) ning peale seda nuid 2 päevajooksul on seda kohati ettetulevat serveri kokkujooksmist või lagi jäänud tõsiselt harvemaks. Vast tunnis korra tuleb ette.
|
Väga raske on uskuda, et antud muudatus midagi väga muuta sai. Põhjus lihtne, mysqltuneri väljundis oli järgmine rida:
Kood: | [OK] InnoDB data size / buffer pool: 768.0K/128.0M |
Sellest võib üsna üheselt järeldada, et InnoDB-d sa väga suures mahus just ei kasuta ja enamus baase/tabeleid jookseb MyISAMi peal endiselt. Seega on kiirenemine silmapete või muutsid sa ka midagi muud samaaegselt.
|
|
|
|
_________________
|
|
|
|
|