Fuzzy.cz http://www.fuzzy.cz/cs/ ... because the world is not crisp ... cs Mon, 02 Apr 2012 23:38:24 +0200 http://www.rssboard.org/rss-specification tv@fuzzy.cz Seagate BlackArmor NAS 220 http://www.fuzzy.cz/cs/clanky/seagate-blackarmor-nas-220/ <p> <img alt="" src="http://www.fuzzy.cz/image/seagate_blackarmor_nas_220.jpg" style="width: 135px; height: 176px; float: left; margin-right: 10px;" />Před pár dny jsem se konečně rozhoupal k pořízení malé NAS, zejména proto abych si doma mohl lépe zálohovat data (na samostatné zařízení). Nakonec jsem se rozhodl pro 2TB model <a href="http://www.seagate.com/www/en-us/products/network_storage/blackarmor/blackarmor_nas_220/">Seagate BlackArmor NAS 220</a>, tj. vlastně malého počítače na dva 3,5" disky ve kterém jsou osazeny 1TB disky (v mém případě model <a href="http://www.seagate.com/ww/v/index.jsp?vgnextoid=20b92d0ca8dce110VgnVCM100000f5ee0a0aRCRD">ST31000528AS</a>). Dovoluji si krátce shrnout zkušenosti s tímto zařízením, se kterým jsem zatím v podstatě spokojen.</p> Mon, 02 Apr 2012 23:38:24 +0200 49c34a56a9037343f25693eb6139c0a5 Čtyři důvody proč si připlatit za svobodný software http://www.fuzzy.cz/cs/clanky/ctyri-duvody-proc-si-priplatit-za-svobodny-software/ <p> Na minulém ročníku pgconf.eu (2010) měl úvodní slovo <a href="http://www.webmink.net/">Simon Phipps</a>, který mluvil o důvodech proč firmám stojí za to investovat do řešení založených na free software. Náhodou jsem narazil na video se záznamem této přednášky (byť z jiné konference, ale obsahově stejné) - doporučuji shlédnout.</p> <p> <iframe allowfullscreen="" frameborder="0" height="330" mozallowfullscreen="" src="http://player.vimeo.com/video/17194861?title=0&amp;byline=0&amp;portrait=0" webkitallowfullscreen="" width="590"></iframe></p> Sun, 29 Jan 2012 15:54:19 +0100 e1eb2da7b9b2c3fadc0773ee8bfafe27 Fulltext se slovníky ve sdílené paměti http://www.fuzzy.cz/cs/clanky/fulltext-se-slovniky-ve-sdilene-pameti/ <p> Pokud používáte <a href="http://www.postgresql.org/docs/9.0/static/textsearch.html">fulltext zabudovaný do PostgreSQL</a> a vzhledem k povaze jazyka vám nestačí řešení založené na <a href="http://www.postgresql.org/docs/9.0/static/textsearch-dictionaries.html#TEXTSEARCH-SNOWBALL-DICTIONARY">snowballu</a> (což funguje dobře pro angličtinu, ale například pro češtinu nic takového s rozumnou přesností neexistuje a asi ani existovat nebude), jste víceméně nuceni používat ispell slovníky. V tom případě jste si určitě všimli dvou nepříjemných vlastností.</p> <p> Slovníky se načítají do paměti jednotlivých spojení (backendů), tj. každé spojení při prvním dotazu stráví netriviální čas parsováním souborů se slovníkem, a každé spojení si drží vlastní kopii. Pokud naparsovaný slovník zabere např. 25MB (a to není nic výjimečného) a máte třeba 20 spojení která se alespoň jednou dotkla fulltextu, rázem vám zmizí 500 MB paměti (což např. na VPS není málo).</p> <p> Existují řešení jak toto řešit - např. použitím connection poolu s již inicializovaným fulltextem (tj. šetříte CPU ale plýtváte pamětí), vyhrazením několika persistentních spojení pro fulltext (ale s tím se zase hůř pracuje). Existují asi i další možnosti které mne teď nenapadají, ale nic z toho není ideální ...</p> <p> Nedávné problémy právě s fulltextem mne vyprovokovaly k napsání <a href="http://github.com/tvondra/shared_ispell">extension</a> která umožňuje sdílení slovníků ve sdílené paměti. Ani toto řešení není dokonalé (více na konci článku), ale rozhodně je to krok správným směrem. Takže jak to funguje a co to vlastně umí?</p> Wed, 04 Jan 2012 00:06:39 +0100 0ca39c830bb3c01eed63e090890b2e45 Connection limits - proof of concept http://www.fuzzy.cz/cs/clanky/connection-limits-proof-of-concept/ <p> Čas od času se někdo v mailing listu <a href="http://archives.postgresql.org/pgsql-general/2011-11/msg01099.php">zeptá</a> jestli existuje způsob jak omezit počet spojení podle IP adresy, databáze nebo uživatele. Ne, nic takového v core implementováno není, ačkoliv by to byla velmi užitečná vlastnost zejména clustery sdílené více uživateli (aplikacemi, zákazníky, ...). Podobné quoty lze někdy dostatečně implementovat pomocí connection pooleru jako je <a href="http://pgfoundry.org/projects/pgbouncer/">pgbouncer</a> nebo věcí jako je <a href="http://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-connlimit">netfilter connlimit</a>, ale obě řešení mají určité nevýhody.</p> <p> Ale! Máme přeci věcičky kterým říkáme "extensions", "hooky" a "sdílené knihovny." Minulý týden jsem napsal jednoduchý "proof of concept" extension která používá "client auth hook" a umožňuje vám nastavit omezení počtu spojení podle různých kritérií. Není to dokonalé (viz. dále), ale funguje to celkem pěkně. Zatím je dostupná na <a href="https://github.com/tvondra/connection_limits">githubu</a> a až opravím zbývající drobnosti tak ji publikuji na <a href="http://www.pgxn.org/">pgxn</a>.</p> <p> PS: Díky Magnusovi za upozornění že existuje "client auth hook" který by se možná dal použít, a&nbsp; TL za upozornění jak neuvěřitelně ošklivý hack byla původní verze extension.</p> Wed, 07 Dec 2011 16:35:03 +0100 b5ceb99d27cd8274b9a1464752afeef8 Výpočet kvantilů a ořezávajících agregačních funkcí http://www.fuzzy.cz/cs/clanky/vypocet-kvantilu-a-orezavajicich-agregacnich-funkci/ <p> Pokud jste někdy někdy potřebovali počítat medián nebo jiné kvantily, pravděpodobně už jste zjistili že přímo v PostreSQL odpovídající agregační funkce zabudována není. Jsou dostupná různá externí řešení s různou flexibilitou a výkonem - dovolte mi jmenovat alespoň <a href="http://www.joeconway.com/presentations/oscon-pres-2003-1.pdf">řešení Joea Conwaye založené na PL/R</a> a <a href="http://www.depesz.com/index.php/2009/07/13/calculating-median/">depeszovo PL/pgSQL řešení</a>. Osobně jsem s žádným z těchto řešení nebyl příliš spokojen ale protože jsem poněkud línější tak jsem nenapsal nic vlastního ... až do minulého týdne. Extension (již <a href="http://pgxn.org/dist/quantile/1.0.0/">dostupná na pgxn</a>) je založena na poněkud nechutné fintě (podrobněji dále), ale zdá se že to funguje, zejména pokud se jedná o výkon.</p> <p> Když jsem dokončil zmíněnou extension, uvědomil jsem si že bych stejný trik mohl použít k implementaci ořezaných agregačních funkcí - nevím jestli je to správný termín, nicméně znamená to něco jako "odstraň 3% nejnižších hodnot, 2% nejvyšších hodnot a ze zbytku spočítej AVG/VARIANCE." V podstatě se jedná o elegantní způsob jak se zbavit "outliers" tj. hodnot které leží velmi daleko od ostatních. I tato extension je již <a href="http://pgxn.org/dist/trimmed_aggregates/1.0.0/">dostupná na pgxn</a>.</p> Mon, 07 Nov 2011 22:01:08 +0100 18d459133fda829cdd04d5e63f9de10b Sběr histogramu dotazů http://www.fuzzy.cz/cs/clanky/sber-histogramu-dotazu/ <p> Pokud používáte PostgreSQL a potřebujete sledovat výkonnostní anomálie, znáte asi konfigurační volbu <a href="http://www.postgresql.org/docs/9.1/static/runtime-config-logging.html#GUC-LOG-MIN-DURATION-STATEMENT">log_min_duration</a> a možná i <a href="http://www.postgresql.org/docs/9.1/static/auto-explain.html">auto_explain</a> modul, které vám umožňují nějakým způsobem reagovat na výskyt dotazů pomalejších než stanovený limit. To je samozřejmě výborná věc, ale má to jeden drobný háček - jak stanovit vhodnou hranici, zejména pokud je doba běhu jednotlivých dotazů velmi různorodá?</p> <p> Pokud hranici stanovíte příliš nízko, získáte obří logy s velkým množstvím dotazů. Naopak pokud ji stanovíte příliš vysoko, nebudete mít možnost zaznamenat změny u rychlejších dotazů. Co když máte hranici nastavenu na 200ms ale změna se uděje pod touto hranicí, tj. co když dotazy které původně trvaly 50ms náhle trvají 150ms? Doba zpracování se efektivně ztrojnásobila ale nic se nezaloguje ...</p> Fri, 04 Nov 2011 03:54:10 +0100 bce9e310596b9b301751a4a9b880fb8d ZTE Skate http://www.fuzzy.cz/cs/clanky/zte-skate/ <p> Před časem jsem usoudil že moje Nokia N900 umírá - a to nejen hardwarově (např. přestala fungovat detekce otevření krytky fotoaparátu), tak i po stránce platformy - zpětně si můžeme otevřeně přiznat že Maemo se narodilo polomrtvé a MeeGo mrtvé. Nastal čas poohlédnout se po náhradě, volba přirozeně padla na Androidí platformu - uzavřenost iPhone mi nesedí, to samé platí pro Windows, atd.</p> <p> Petr Krčmář z roota shodou okolností pár dní před tím recenzoval <a href="http://petrkrcmar.blog.root.cz/2011/09/22/zte-blade-naslapany-android-za-par-korun/">ZTE Blade</a>, jakéhosi menšího levnějšího bratříčka Skate, čímž přitáhl mou pozornost k firmě ZTE. Pro Skate myslím platí většina toho co o Blade, ale podívejme se v čem se Skate liší ...</p> Sun, 23 Oct 2011 15:43:29 +0200 f173290732579f8ad40a6064f976d11d Výsledky benchmarku na SSD - TPC-H http://www.fuzzy.cz/cs/clanky/vysledky-benchmarku-na-ssd-tpc-h/ <p> Podíváme-li se na <a href="http://www.fuzzy.cz/bench/compare-tpch.php?type[]=btrfs-datacow-barrier:2&amp;type[]=btrfs-datacow-barrier:4&amp;type[]=btrfs-datacow-nobarrier:2&amp;type[]=btrfs-datacow-nobarrier:4&amp;type[]=btrfs-nodatacow-barrier:2&amp;type[]=btrfs-nodatacow-barrier:4&amp;type[]=btrfs-nodatacow-nobarrier:2&amp;type[]=btrfs-nodatacow-nobarrier:4&amp;type[]=ext2:2&amp;type[]=ext2:4&amp;type[]=ext3-journal-barrier:2&amp;type[]=ext3-journal-barrier:4&amp;type[]=ext3-journal-nobarrier:2&amp;type[]=ext3-journal-nobarrier:4&amp;type[]=ext3-ordered-barrier:2&amp;type[]=ext3-ordered-barrier:4&amp;type[]=ext3-ordered-nobarrier:2&amp;type[]=ext3-ordered-nobarrier:4&amp;type[]=ext3-writeback-barrier:2&amp;type[]=ext3-writeback-barrier:4&amp;type[]=ext3-writeback-nobarrier:2&amp;type[]=ext3-writeback-nobarrier:4&amp;type[]=ext4-journal-barrier:2&amp;type[]=ext4-journal-barrier:4&amp;type[]=ext4-journal-nobarrier:2&amp;type[]=ext4-journal-nobarrier:4&amp;type[]=ext4-ordered-barrier:2&amp;type[]=ext4-ordered-barrier:4&amp;type[]=ext4-ordered-nobarrier:2&amp;type[]=ext4-ordered-nobarrier:4&amp;type[]=ext4-writeback-barrier:2&amp;type[]=ext4-writeback-barrier:4&amp;type[]=ext4-writeback-nobarrier:2&amp;type[]=ext4-writeback-nobarrier:4&amp;type[]=jfs:2&amp;type[]=jfs:4&amp;type[]=nilfs2-barrier:2&amp;type[]=nilfs2-barrier:4&amp;type[]=nilfs2-nobarrier:2&amp;type[]=nilfs2-nobarrier:4&amp;type[]=reiserfs-flush:2&amp;type[]=reiserfs-flush:4&amp;type[]=reiserfs-none:2&amp;type[]=reiserfs-none:4&amp;type[]=xfs-barrier:2&amp;type[]=xfs-barrier:4&amp;type[]=xfs-nobarrier:2&amp;type[]=xfs-nobarrier:4&amp;key=tpch-m-time">srovnání</a> SSD s tradičním pevným diskem v TPC-H části benchmarku, zjistíme že zvýšení výkonnosti je ještě menší než u <a src="http://www.fuzzy.cz/cs/clanky/vysledky-benchmarku-na-ssd-read-write-pgbench/">read-write pgbench zátěže</a>. Například při srovnání m-time (tj. času spotřebovaného pro vyhodnocení stejně naplánovaných dotazů, podrobněji je definováno v článku o <a src="http://www.fuzzy.cz/cs/clanky/vysledky-benchmarku-hdd-tpch/">výsledcích TPC-H benchmarku na standardním disku</a>) vypadá na SSD s XFS situace takto</p> <p> <img alt="výkon XFS (m-time) se SSD diskem" src="http://www.fuzzy.cz/image/ssd-2-xfs-nobarrier-tpch-m-time.png" style="width: 590px; height: 275px;" title="výkon XFS (m-time) se SSD diskem" /></p> <p> zatímco na standardním rotačním pevném disku takto</p> <p> <img alt="výkon XFS (m-time) s tradičním diskem" src="http://www.fuzzy.cz/image/hdd-2-xfs-nobarrier-tpch-m-time.png" style="width: 590px; height: 275px;" title="výkon XFS (m-time) s tradičním diskem" /></p> <p> tj. SSD disk je jen zhruba 1,5x rychlejší než tradiční rotační disk (což je výrazně horší výsledek než u read-only/read-write pgbenche kde byl nárůst 25x/13x). I pro SSD disk nicméně platí pravidlo že nejlepšího výkonu je dosahováno pro velké databázové bloky a velikost bloků souborového systému nehraje příliš zásadní roli.</p> Wed, 28 Sep 2011 23:00:52 +0200 023f9ac7eb22ce5634d912156fbf7cd7 Výsledky benchmarku na SSD - read-write pgbench http://www.fuzzy.cz/cs/clanky/vysledky-benchmarku-na-ssd-read-write-pgbench/ <p> Takže se podívejme na další SSD výsledky - read-write pgbench. Stejně jako v případě read-only benchmarku platí že výsledky jednotlivých souborových systémů jsou téměř totožné, ale od</p> <p> <img alt="" src="http://www.fuzzy.cz/image/ssd-average-tps-rw.png" style="width: 590px; height: 275px;" /></p> <p> BTW v předchozím postu jsem zapomněl zmínit jednu důležitou věc - pokud máte zájem o data sesbíraná během benchmarku, rád vám je poskytnu. Má to jednu technickou chybičku - výsledky pro HDD mají 3.4GB (komprimované 1GB), výsledky pro SSD dokonce 38GB (10GB komprimované), což je příliš mnoho než abych to umístil na tenhle blog. Ale pokud pojedete na pgconf.eu do Amsterdamu, stačí si o data říct ...</p> Wed, 21 Sep 2011 12:43:28 +0200 68c8d7bda1ab37f0c260fa6e89b2bc65 Výsledky benchmarku na SSD - read-only pgbench http://www.fuzzy.cz/cs/clanky/vysledky-benchmarku-na-ssd-read-only-pgbench/ <p> V předchozích několika postech jsem se zabýval výsledky benchmarku na tradičním SATA pevném disku, v několika následujících se budu věnovat výsledkům stejných testů na SSD disku. Konkrétně v tomto postu se jedná o read-only pgbench benchmarku. Výkon na SSD ve všech testech dle očekávání výrazně narostl, je ale zajímavé sledovat jak se nárůst výkonu mění v závislosti na typu benchmarku a jak se téměř dokonale stírají rozdíly mezi různými souborovými systémy.</p> <p> Průměrný výsledek přes všechny souborové systémy vypadá takto:</p> <p> <img alt="průměrný read-only výkon na SSD" src="http://www.fuzzy.cz/image/ssd-average-tps-ro.png" title="průměrný read-only výkon na SSD" /></p> <p> &nbsp;Výsledky pro SSD jsou již dostupné <a href="http://www.fuzzy.cz/bench/">zde</a>, konkrétně srovnání read-only výkonu je <a href="http://www.fuzzy.cz/bench/compare-pgbench.php?type[]=btrfs-datacow-barrier:3&amp;type[]=btrfs-datacow-nobarrier:3&amp;type[]=btrfs-nodatacow-barrier:3&amp;type[]=btrfs-nodatacow-nobarrier:3&amp;type[]=ext2:3&amp;type[]=ext3-journal-barrier:3&amp;type[]=ext3-journal-nobarrier:3&amp;type[]=ext3-ordered-barrier:3&amp;type[]=ext3-ordered-nobarrier:3&amp;type[]=ext3-writeback-barrier:3&amp;type[]=ext3-writeback-nobarrier:3&amp;type[]=ext4-journal-barrier:3&amp;type[]=ext4-journal-nobarrier:3&amp;type[]=ext4-ordered-barrier:3&amp;type[]=ext4-ordered-nobarrier:3&amp;type[]=ext4-writeback-barrier:3&amp;type[]=ext4-writeback-nobarrier:3&amp;type[]=jfs:3&amp;type[]=nilfs2-barrier:3&amp;type[]=nilfs2-nobarrier:3&amp;type[]=reiserfs-flush:3&amp;type[]=reiserfs-none:3&amp;type[]=xfs-barrier:3&amp;type[]=xfs-nobarrier:3&amp;key=tps-ro">zde</a>.</p> Sun, 18 Sep 2011 23:35:30 +0200 f724b8e04984615add20767e853539e1