С╕чень 2008 Archives

Пнд С╕ч 28 17:08:20 EET 2008

Програм╕зм ╕ програм╕сти

Я вже майже звик, що люди, що 2 рази в житт╕ бачили в оч╕ код на PHP вважають себе програм╕стами. А т╕, що вм╕ють написати select * from table вважають себе неабиякими DBA. Але сьогодн╕ я п╕знав усю глибину наших глибин.

Ма╓мо сервер баз даних. В╕н обслугову╓ к╕лька сайт╕в. Один з сайт╕в досить важкий, робить в середньому п╕д тисячу запит╕в в секунду, не найпрост╕ших запит╕в. Сьогодн╕ подивився на них ближче, бо машинц╕ дещо недобре. Ма╓мо запит, який, якщо в╕рити explain, розклада╓ться в 4 б╕льш простих запити, з використанням тимчасово╖ таблиц╕, з виб╕ркою по 1.08 м╕льйона рядк╕в. ╤ не використову╓ при цьому жодного ╕ндекса. Зате використову╓ математику. Текст приблизно такий:

Select... from... where... AND FLOOR(table.time/1000000) = FLOOR(20080128141036/1000000);

За допомогою викидання математики ╕ вв╕мкнення лог╕ки та створення ╕ндекса по table.time ма╓мо 177660 рядк╕в. За допомогою правила between ма╓мо 173 (Прописом: сто с╕мдесят три) рядки. При цьому використову╓ться ╕ндекс.

Думаю, хто вчив цих горе-математик╕в. ╤ на що були розрахован╕ ╖х задумки. Адже булева алгебра в рази швидша за операц╕╖ з нец╕лими числами, використання ╕ндексу да╓ неабиякий прир╕ст продуктивност╕...

Тихо плачу над майбутн╕м ╕нформац╕йних технолог╕й. Хочеться напитися, заснути ╕ прокинутися в ц╕лком ╕ншому св╕т╕, де люди вм╕ють думати головою...

----- -----

Posted by pseudo | Permanent link

Срд С╕ч 23 13:57:57 EET 2008

MySQL+InnoDB, частина третя, остання

Натрапив на сайт http://www.mysqlperformanceblog.com. Це вир╕шило вс╕ мо╖ проблеми ╕з MySQL взагал╕ ╕ з InnoDB конкретно. Тепер машина, що ран╕ше при траф╕ку в 15 мегаб╕т таки немало навантажувалась через деякий час роботи (коли приходили тяжк╕ запити, що стояли в стан╕ "copying to tmp table" пачками по дочорта штук) зовс╕м н╕чим не займа╓ться. Викоритсано 1.7 ╕з 2Гб пам'ят╕. LA не доходить до одиниц╕.

Що зм╕нилося:

innodb_buffer_pool_size		= 1024M
innodb_additional_mem_pool_size	= 256M
innodb_thread_concurrency	= 8
innodb_flush_method		= O_DIRECT
innodb_flush_log_at_trx_commit	= 2

До цього стояли дефолтн╕ налаштування даних зм╕нних. ╤того, я задоволений проробленою роботою, ╕, особливо, б╕йцями з вищезгаданого сайту. Велике ╖м спасиб╕ за зрозум╕лу ╕ толкову доку.

UPD 16:14 29.01.2008: а якщо ще з╕брати MySQL з Linux Threads... Це просто щастя якесь :)

----- -----

Posted by pseudo | Permanent link

Птн С╕ч 18 16:28:27 EET 2008

MySQL again...

Багато танцював з MySQL. Завдяки настройкам зм╕г зменшити навантаження на сервер ще в дек╕лька раз╕в. Але н╕чого не можна зробити з результатами запит╕в, що видають забагато ╕нформац╕╖. Вони так ╕ висять в стан╕ Sending data по 100+ секунд. При цьому вони, звичайно, заважають ╕ншим.

Вже вкотре переконуюсь, що за допомогою одного запиту можна зробити багато проблем ц╕лому серверу MySQL. ╤ це найголовн╕ша проблема цього сервера. Наф╕г. Все mission-critical перевезти на PostGre.

----- -----

Posted by pseudo | Permanent link

Пнд С╕ч 14 13:37:41 EET 2008

MySQL + InnoDB

Щойно перев╕в чергового кл╕╓нта на InnoDB зам╕сть MyISAM. Це просто щастя якесь. В╕дтюнений MySQL жер до пере╖зду 300+ процент╕в процессора Core2 Quad, тепер - не дотягу╓ до 70. В mtop незвично тихо. ╤ це з дефолтними налаштуваннями InnoDB на FreeBSD.

Вже не вперше раджу переводити таблиц╕ в InnoDB користувачам. Основний плюс - блокування на р╕вн╕ рядк╕в, а не ц╕лих таблиць, як в MyISAM. Останн╕м часом все част╕ше вистача╓ ╕ потужност╕ процессора, ╕ пам'ят╕, щоб нормально обробити ╕ закешувати запит до БД, але за пристойного навантаження на сайт виника╓ високий пот╕к запит╕в, що стають в чергу з статусом Locked. ╤ не дивно, при в╕дом╕й пол╕тиц╕ роботи MyISAM з таблицями.

Отже, в раз╕ використання MySQL InnoDB-наш виб╕р. Хоча, якщо вже юзати його, то чому б не пере╖хати на нормальний PostGreSQL? Це запитання риторичне, для вебмайстр╕в, що н╕коли не бачили н╕чого, окр╕м MySQL + PHP так╕ страшн╕ слова, як PostGre - новина :(

----- -----

Posted by pseudo | Permanent link

Птн С╕ч 11 12:43:59 EET 2008

Garmin GPSMap 60Csx + Debian Linux

Придбав соб╕ цяцьку, Garmin GPSMap 60Csx. Штука просто кайфова, особливо в пор╕внянн╕ з вживаними мною ран╕ше Garmin Etrex Legend. По-перше, Sirf III, ловить супутники нав╕ть у к╕мнатах з 1 в╕кном. По-друге, набагато зручн╕ший ╕нтерфейс, можна вказувати точку сл╕дування безпосередньо з стор╕нки з картою, нав╕вшись курсором. З Legend таке не проходило. По-трет╓, Micro-SD картка. У мене там 128М. Вс╕ потр╕бн╕ мен╕ карти займають до 30М. А це вся Укра╖на (доступна тут: http://avalon.org.ua/diff/GPS/Ukraine_Garmin_noroute_cyr.zip), детальн╕ший Крим, Карпати (майже ╕деальн╕ карта доступна тут: http://avalon.org.ua/diff/GPS/Karpaty_4_v4.0-0512060242-bin.zip), Кавказ (ця зовс╕м б╕дненька). Плюс залив вейпо╕нт╕в Криму. Багато.

Ну, по порядку.

Для роботи з GPS ╓ ульотна програма gpsman. Вона просто працю╓. Нормально злива╓ ╕ залива╓ треки, вейпо╕нти ╕ таке ╕нше в/╕з GPS. Нормально завантажу╓ граф╕чн╕ карти (треба т╕льки встановити модуль libtk-img). Не вм╕╓ ╕мпортувати треки ╕ вейпо╕нти Ozi Explorer :( Проте нормально експорту╓ ╖х в формат Ozi. Тому довелося поставити gpsbabel. Останн╕й вм╕╓ конвертувати GPS-дан╕ м╕ж неймов╕рною купою формат╕в, в тому числ╕ й ozi. Я робив так:

gpsbabel -i ozi -f POI.txt -o gpx -F POI.gpx

П╕сля чого можу нормально ╕мпортувати в gpsman точки в формат╕ gpx.

Для кириличних точок я обламався п╕дбирати кодування, тому просто зконвертував файл з такими точками в трансл╕т за допомогою catdoc:

catdoc -s koi8-u -d us-ascii tmp/GPS/Crimea/POI2.txt > POI.txt

Загалом, нормально.

Оск╕льки наб╕р м╕сць, куди я можу податися, досить обмежений, витягнув соб╕ карти Криму, Карпат та Кавказу. З╕брав до купи за допомогою sendmap. Нажаль, ця софтинка не йде в комплект╕ Debian, хоча, я думаю, ╖╖ могла б зам╕нити gpsbabel. Але з останньою л╕ньки було розбиратися. Тому просто злив вс╕ карти в одну директор╕ю ╕ запустив

sendmap20 -lgmapsupp.img *

Оск╕льки м╕й прилад ум╕╓ працювати як USB Mass Storage, я його саме так ╕ вв╕мкнув. Пот╕м залив створену мапу в GPS:

mount /mnt/flash
cp gmapsupp.img /mnt/flash/Garmin/
umount /mnt/flash

Щастя прийшло. Отже, тепер я маю все, що мен╕ потр╕бно для роботи з мо╖м приладом. Була думка про те, що, можливо, ма╓ сенс поредагувати отриману карту, але я не знайшов нормального редактора карт в формат╕ Garmin img п╕д Linux, а нормально працююча п╕д wine програма MapEdit не надиха╓ мене на роботу :) Та ╕ не до цього вже, адже все, що потр╕бно в мене вже ╓.

Дореч╕, треки можна читати прямо з GPS в режим╕ USB Drive, вони там лежать в формат╕ gpx в кореневому каталоз╕, ╕мена в╕дпов╕дають датам.

----- -----

Posted by pseudo | Permanent link