INSERT DELAYED

Školení, která pořádám

MySQL obsahuje rozšíření příkazu INSERT v podobě modifikátoru DELAYED. Ten způsobí, že data do tabulky nejsou uložena hned, ale až v momentě, kdy nebudou blokovat žádný SELECT. Vzhledem k tomu, že INSERT u MyISAM tabulek blokuje SELECT pouze v případě, kdy jsou uvnitř dat prázdné bloky po smazaných záznamech, je podle mě vhodné INSERT DELAYED využít pouze za těchto podmínek:

Vzhledem k tomu, že používání INSERT DELAYED znamená obhospodařování vlastního vlákna pro každou tabulku, která tuto funkci používá, a tím i vyšší režii (prý až o 30 %), je lepší se v ostatních případech tomuto rozšíření vyhnout.

Přijďte si o tomto tématu popovídat na školení Konfigurace a výkonnost MySQL.

Jakub Vrána, Výuka, 20.9.2006, diskuse: 5 (nové: 0)

Diskuse

Vojtěch Semecký:

Souhlasím s tím, že je lepší se tomuto rozšíření vyhnout. Experimentoval jsem s ním dlouho. Dále jsem experimentoval s obdobným rozšířením UPDATE LOW_PRIORITY a ani jedno se mi neosvědčilo. Testoval jsem to v praxi na všech svých webech (SrovnaniCen.cz, Kinomol.cz, Kratce.cz, FreshFolder.com) a všude se výkon DB spíše zhoršil.

O té vyšší režii jsem nevědel, ale setkal jsem se s jiným problémem. On totiž ten čekající INSERT během čekání blokuje jeden MySQL proces. A pokud máte hodně vytížený server, tak se často stane, že tam delší dobu trčí nevyřízené INSERTY, když na ně přijde řada, tak to pak zasekne tolik SELECTů, že se kompletně vyčerpají MySQL procesy.

Zkrátka výkon tím spíš klesne a jen si zaděláte na problémy se zahlcováním MySQL.

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL: Reakce na: Vojtěch Semecký

Martiner:

Nejlepší je, vyhnout se MyISAM...

Vojtěch Semecký:

Proč? MyISAM je sice jednoduchý a chybí mu spousta vlastností, které jiné DB enginy mají, ale pokud je nepotřebujete, je zase velmi rychlý. Pro velkou část webových aplikací je MyISAM nejlepší volba.

Petr:

No jo, ale v InnoDB nemůžu udělat index nad polem typu 'text'. Takže pokud tam něco hledám (třeba pomocí LIKE) tak je to bez indexu na strašně dlouho :-(
A třeba zrovna aplikace typu shop je bez možnosti hledání v textu celkem k ničemu...

ikona Jakub Vrána OpenID:

Index pomůže pouze v případě, že se hledá od začátku textu. Pokud se hledá kdekoliv uvnitř textu pomocí '%$search%' (typický případ), tak je index k ničemu.
avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.