login:        password:      
Combats Scrolls
Rambler's Top100
Гость БК
echo | kirillica Open user info Open user photogallery user RSSkirillica
14.08.09 11:51   |    :P  en
Comments: 1 | Post comment
updated 02.08.09 19:00
02.08.09 18:10   |    MySQL: MyISAM vs InnoDB vs MEMORY
 ru
 Те, кто играют в Двар, знают, что на сайте у тамошних Мерков есть мега-ресурс - рейтинг игроков. "Мега" он и по посещаемости, и по экспонентальным формулам рассчета очков рейтинга. Когда появилась первая версия ресурса, в базе было коло 30000 игроков. Исторические сложилось, что движки обоих таблиц, используемых в рейтинге - MyISAM. Вроде бы, "родной" движок от самих разработчиков MySQL, да и (с такими-то объемами) все работало "на ура". Тем более, что MyISAM позиционируется MySQL как лучший для OLAP (On-line Analyze Processing).

Но время идет, рейтинг дополняется новыми категориями, количество игроков в базе растет, и вот теперь это уже более 180 000 записей и более 500 select/insert/update/delete'ов по первичному ключу в минуту. И это без того самого пресловутого OLAP, который (в нашем случае) и есть выдача рейтинга по заданным пользователем критериям. Путем экспериментов, нашел комбинацию запросов, которые позволяю сделать это максимально быстро:
1) SELECT count(*) FROM <tables> WHERE <user filter> - дабы узнать, сколько же пользователей удовлетворяет фильтру
2) SELECT <data> FROM <tables> WHERE <user filter> LIMIT <page> - непосредственно страница рейтинга
3) SELECT count(*) FROM <tables> WHERE rating > <data entry rating> UNION ... - запрос UNION с для определения позиции каждого игрока на странице (это нужно потому, как сортировки бывают не только по рейтингу, поэтому лучший в одной категории может быть худшим в общем зачете, что и надо бы отразить его местом). Т.е. 3 запроса на каждую отображаемую страницу.

Все работает более-менее, пока пользователь захочет посмотреть не первую страницу, а, скажем 3001-ую. Что важно: на каждое поле, на которое может быть наложена сортировка и/или поиск - стоит индекс. Выходит, 12-20 секунд (в зависимости от загруженности сервера) - это предел производительности. Более того, фактически все это время таблицы залочены, а это значит, что остальные запросы ждут, пока выполнятся эти, при этом количество тредов в статусе Waiting резко возрастает. Быстрее MyISAM просто не может (железо хорошее, под базу выдано прилично ресурсов). А что сделает пользователь, когда он пару раз подождет? Правильно, среднестатистический серфер предпочтет вообще больше не ждать. Значит, надо что-то делать.

Иду в гугл, думаю. Ага, InnoDB - чуть-чуть хуже для OLAP (вроде как), но заметно лучше при таком количестве транзакций. И написано красиво: поменяйте движок через ALTER TABLE <table> ENGINE = InnoDB; - и будет вам счастье. Смотрю на загрузку сервера. Вроде, никого нет (времени - первый час ночи), тестирую производительность по транзакциям на локальной машине - действительно лучше. где-то на 10%. Запускаю. Ага... На 15ой минуте мне больше ничего не оставалось, как убить процесс. Сервер встал, загрузка выросла с 0.7 до 2.5, количество процессов в очереди поражает воображение. Но вот что интересно: KILL <process id> в MySQL процесс-то убило, он перешел в статус End, но сервер "не отпустило" и локи с таблиц не сняло. подождал пару минут и сделал в консоли "красивый" стоп-старт: /etc/init.d/mysqld stop. И что вы думали? Не останавливается. Говорит, failed - и все. Остается крайняя мера - kill -9 <pid>. Убился. Поднялся. Думаю дальше.

Делаю новый скрипт: создаю еще одну табличку, но уже с правильным движком, запускаю INSERT INTO ... SELECT * FROM - и жду. На этот раз 11 минут. И 10 минут на OPTIMIZE (на всякий случай), ибо "вес" таблицы вырос с 130 до 160 мегабайт. Последнее не помогло. Добавляю ссылку одной таблицы на другую, что бы совсем красиво и совсем как в крутых RDBMS (Relational DataBase Management System): CONSTRAINT FOREIGN KEY. Проверяю активно вывод рейтинга. И расстраиваюсь в конец. Предыдущие 12 секунд стали 2 минутами 12 секундами. Ладно, думаю, индексы не пересчитал (на сайте произовидтеля пишут, что такая бага иногда бывает, хотя... чего это он делал там 11 минут?). Делаю DROP ... CREATE INDEX... , как умные люди советуют. Не помогает. В шоке. Называется, починил рейтинг. Зато обычные транзакции просто летают.

И тут меня осенило. Памяти на сервере дофига, а что, если сделать систему с двумя таблицами на базе InnoDB и MEMORY. Т.е. для вывода рейтинга просто запихнуть все в HEAP, т.е. в память. В свое время ребята из Oracle рассказывали, что так их клиенты решают свои проблемы с производительностью. Остается надеется, что ребята из MySQL, т.е. из Sun Microsystems, т.е. из IBM, который, в свою очередь, выпускает мало кому нужную, но по слухам крутую DB2, ничуть не хуже.

Читаю мануал, интересные вещи пишут. В MySQL (по умолчанию) данный движок юзают для небольших таблиц, записи в которых не очень-то и важны. Например, список сессий. Если сервер перезапусткается/умирает - данные пропадают, но структура остается. Но мне так и так раз в 10 минут надо перезаписывать данные там, так что подходит. Эту задачу решим с помощью crontab. А что делать с объемом данных? Ага, пишут: измените в системных настройках max_heap_table_size - и солнышко засветит даже в полтретьего ночи. Увеличиваю, создаю структуру таблицы (внимание, MEMORY поддерживает HASH-индексы, но их надо определять вручную через USING HASH, поэтому тупо копировать структуру для лучшей скорости просто глупо. об этом, кстати, пишут вообще где-то в темных уголках мелкими буквами. это, кстати, первые грабли, которые надо знать).

Копирую через INSERT INTO ... SELECT * FROM - через 4 секунды "вылетает" с ошибкой, что Table is full. При этом копируется где-то 40000 записей. Офигеть. Учитывая, что я выдал один гигабайт под это безобразие - он утверждает, что все, нету места. Смотю размер таблицы - данным объемом даже и не пахнет. Оказывается, что, создавая структуру, надо еще и "намекнуть", сколько записей вы бы хотели в нее положить. Через MAX_ROWS.

Пересоздаю структуру, ставлю 1000000 строчек (чтоб уж наверняка), запускаю копирование данных... Мистика - 5 секунд. Да, за 5 секунд создается таблица в памяти размером в 110 мегабайт со всеми нужными индексами. Тестирую рейтинг - по 1-2 секунды на страницу, независимо от того, первая она или где-то в серединке. Дело за малым - написать скрипт, разделяющий и обновляющий данные. Собственно, тут все казалось совсем тривиальным: DELETE FROM ... ; INSERT INTO ... SELECT * FROM. (TRUNCATE средствами PHP не поддержвиается) Написал, протестировал. Вроде, работает. Запустил сервисы сайта в полном объеме.

Почти ушел спать, глянул краем глаза - и снова расстроился. Поскольку фактическое первое, что было написано для сайта - это логер всех запросов с ошибкой, там творились страшные вещи: Deadlock. Т.е. транзакции, которые приходились на момент копирования, блокировались копированием и, не захотев ждать, отваливались. При этом само копирование тоже "падало", независомо от того, в какой момент приходилась транзакция. Значит, надо все копирование "запихнуть" в одну транзакцию, предварительно мануально проставив локи. Дополняю скрипт в начале: SET autocommit = 0; START TRANSACTION; LOCK TABLES <source> READ, <destination> WRITE; и в конце ставлю COMMIT; SET autocommit = 1;. Но не тут-то было. Если DELETE находится внутри LOCK - скрипт "падает" из-за того, что ему резко не хватает памяти. Я даже представить не могу, как связан LOCK и DELETE, но, если поставить DELETE до LOCK - все работает без ошибок, не загружая сервер и память.

И пока, хвала Всевышнему, уже 13 часов работает без сбоев. Что интересно, загрузка сервера от сортировки и содержания двух таблиц в MEMORY меньше, чем без них средствами MyISAM/InnoDB. Необъяснимо, но факт.

Вот такой вот забавный секс до 4ех утра. :))
tags: MySQL fun
Post comment
13.06.09 16:11   |    Skype: первые ощущения  ru
 Итак, с чего бы начать? Во-первых, попасть на работу в Skype не было никогда моей мечтой. Я как бы в принципе до определенного момента даже и не думал об этом. В тоже самое время знал, что рано или поздно то направление, в котором я работал до этого, закроют, так как клиентов, готовых инвестировать в серьезные решения по управлению бизнес-логикой становилось все меньше. Эдакая патовая ситуация, когда все говорят, понимают, что это круто и реально окупится через год-полтора максимум, но, в тоже время, абсолютно не хотят расставаться с деньгами сейчас. Бизнес средних и долгих перспектив, к сожалению, потихонечку умирает.

В один понедельник стало ясно, что очередные человеко-месяцы на разработку перспективных клиентов ушли впустую, и мы расстались с моим предыдущим работодателем. Тяжеловато было за полчаса собрать все мысли и вещи, которые стали общими за эти четыре с половиной года, но я был бы безвозвратно глуп, если бы где-то за полгода до этого момента не начал думать о запасном плане.

В первую же неделю без работы я получил три неплохих предложения. Одно - по продажам, два - по разработке. Но - не цепляло так, что бы "ух": и в деньгах не потерял бы, и люди приглашали знакомые, но что-то не то, не то. К тому же, параллельно с друзьями мы обсуждали их дипломы по магистратуре и душа просила чего-то "хорошо забытого старого". Так я случайно наткнулся на предложение от Skype, да и пара знакомых оттуда вдруг активизировались, рассказывая, как там хорошо.

Что я понял сразу - попасть в Skype не так уж и просто. Лично у меня было три тура собеседования, хотя уже на первом туре мне дали понять, что я подхожу. Причем, последний тур - с будущей командой, которая тоже должна сказать: "нам нравится этот парень". Неважно, на какую должность ты идешь, коллектив должен тебя принять, а уже потом, после всего этого, тебе присылают официальное предложение и ты первый раз узнаешь, какую же зарплату тебе готовы предложить. Поскольку особых разногласий у нас не было, наш выбор окончательно остановился друг на друге.

Вот так неожиданно (для себя образца месяца три-четыре назад) я и оказался в отделе бизнес-безопасности. Выше писал о "хорошо забытом старом" - так оно и есть. Анализ данных, прогнозы, паттерны, статистика, игра на опережение - это и есть теперь моя работа, а так же одна из моих "забытых вышек". Жутко интересно и жутко напоминает охоту. Причем, размеры оружия (или методы - кому как удобней) варьируются от гранатомета до дротика. Кровавые сцены - каждый день :)). Признаюсь, мне, единственному русскому по национальности в отделе, видеть зону "RU" в списках "нехороших пользователей" не особо приятно. Конечно, никто не посмотрит и даже не подумает о тебе ничего плохого, даже если это будет массовым явлением, но что-то где-то как-то "некомильфо" - факт.

Вообще, статус международной корпорации накладывает свои отпечатки. Во-первых, только в таллиннской конторе работает около 25-ти разных национальностей, а в гости приезжают вообще со всего света. Во время обеда столовая напоминает вавилонское столпотворение: количество языков и различных, скажем, типажей, на другие ассоциации не наводит. Да, кстати, кормят неплохо и "за счет заведения". Помимо столовой, в здании есть так же душевые, баня, комната отдыха с биллиардным столом и игровыми приставками и куча других интересных штучек, которые разбросаны по разным уголкам четырехэтажного офиса. Уютненько. В нашем отделе большие окна выходят прямо на лес, так что возможность "отвлечься взглядом" присутствует в том числе.

Еще одно ключевое слово для Skype - безопасность. Скажу честно, никогда я не слышал столько фактов и правил, сколько в первые дни здесь. Тренинги и семинары на эту тему - неотъемлемая часть обучения нового работника. Они включают в себя так же и демонстрацию "косяков", которые случались в мировой практике. Например, многие ли из вас знают, что один испанский телеком-оператор был оштрафован на миллион евро за то, что передал данные о своих клиентах своей "дочке", что бы та их проанализировала и сделала клиентам предложение на новом (для концерна) рынке? И такое, оказывается, сплошь и рядом. Что мне понравилось: если вам кто-то позвонит и начнет спрашивать всякие вопросы (типа исследования) или же делать всякие маркетинговые предложения, то на ваш вопрос "откуда мои контактные данные и вообще, почему вы звоните именно мне?" вам обязаны ответить в максимально подробной и точной форме. Вы имеете полное право знать, откуда берутся ваши данные и на основе каких исследований было решено позвонить именно вам. Более того, вы даже можете потребовать перечень всех ваших характеристик, которые использованы в исследовании. Т.е. т.н. "директорский маркетинг", как показывает практика, штука весьма тонкая и опасная. Судебных прецедентов - масса.

Ну, мы отвлеклись. Итак, общий вывод: здесь комфортно и интересно. И, как оказалось, работает много знакомых по универу. Еще раз убедился, что быть выпускником лучшего высшего учебного заведения в стране - это не пустой звук. Атмосфера - дружелюбная, рабочий язык, естественно, английский, так как даже в нашей команде есть иностранец, который, правда, уже немного понимает по-эстонски. Любимый мною корпоративный дух на должном уровне. Наверное, потому, что все работники являются акционерами Skype. Теперь и я - часть его, а у меня - часть этой "эстонской нокии".

Mood: приветливое 
Post comment
26.05.09 15:04   |    Вот... Новый поворот...  ru
 Как бы это было необычно для меня самого еще месяц назад, с понедельника я работаю в такой интересной компании как Skype...

Mood: хорошее 
Comments: 2 | Post comment
31.03.09 23:22   |    Happy end :)  ru


Mood: романтичное 
Comments: 1 | Post comment
updated 30.03.09 12:52
30.03.09 12:49   |    .masterhost: in memorium
 en
 Ужа давно можно было констатировать факт, но до скролла добрался только сейчас: Всем, кто хочет иметь сайт с хостингом и этот сайт чуть посложней простой новостной и пары статических страниц, настоятельно рекомендую искать хостинг за границей России. "Самый крутой" хостер этой страны - .masterhost - на проверку оказался редкостным говнецом: отвратительный суппорт, неадекватные цены, зверские условия, глючное оборудование. Письма в стиле "сервисы не будут работать несколько часов, так как мы меняем там чего-то" раз в месяц - нормальное явление. А то и чаще. Договор по трафику 1:4 (за один загруженный на сайт мегабайт надо заставить юзера скачать 4, более того, за каждый мегабайт зарубежного трафика вы должны отдать как минимум мегабайт российского) с нереальными штрафами за превышение - тоже в порядке вещей. Вот представьте, что у вас сайт собирает огромное количество информации извне, анализирует и выдает юзеру все с минимальным трафиком и оптимально по загрузке (AJAX+DHTML) - забудьте, что вы можете делать такое в России: вы будете за трафик должны своему хостеру больше, чем за сам хостинг.

Конечно, вы можете таки попытаться уместить свой сайт на площадку без ограничений по трафику. Где, кроме вас, на сервер будет сидеть еще сайтов 100. Но никто не даст вам гарантии, что из-за проблем с сайтом "соседа" ваш просто не будет отвечать по 2-3 часа в сутки. И будьте готовы, что на ваши просьбы о переносе на площадку, где с соседями все хорошо, вам ответят: а фиг тебе... мы не можем дать гарантии, что на новом месте будет лучше, да и вообще... все равны, это лотерея, никаких переездов. Да, при этом, конечно, полностью развернуть свой сайт вам не удастся - доступов до установок сервера у вас-то нет, даже время исполнения скриптов не поменять, не говоря уже об использовании других модулей. То есть вас постоянно вынуждают переехать как минимум на виртуальный хостинг, а то и арендовать машинку. За приличные деньги. Без суппорта. И с ограничением по трафику. Так что у вас есть замечательный выбор: без ограничений по трафику с гнилым суппортом и без возможностей полноценного использования сервера или же намного дороже, с еще более неадекватным суппортом, который может уехать на неделю, оставив вашу проблему нерешенной и написать потом: "уезжал, давайте продолжим". Такой вот "ненавязчивый сервис". Зашибись?

Или другой вариант. Вы находите такую машинку, которая будет только для вас, и ни для кого более: По более, чем приемлемой цене:
DELL R200
Dual Core Xeon 3065
2048MB 667MHz Ram
160GB SATA HDD
Monthly Transfer: 5000 GB

С бесплатным сетапом. С возможностью через чат решать проблемы с суппортом за 10-15 минут максимум. Где вам, а не вы, звонят и спрашивают, довольны ли вы сервисом. Извиняются за любой косяк и благодарят за любой запрос, даже если это не косяк, а вы просто попросили доустановить пару нужных модулей. Где у вас спрашивают, когда вам удобно, что бы были проведены работы на сервере, которые требуют рестарта системы. Где, с момента заказа и оплаты до возможности установки сайта на выбранную вам конфигурацию сервера проходит 10 часов.

Есть разница? С этого момента я настоятельно рекомендую переезжать на хостинг за границу. Тем более, если вы пользуетесь услугами приснопамятной компании .masterhost. Скорость сайта по России от этого не упадет - проверено. Зарубежные компании вкладывают огромные суммы в развитие своей инфрастуктуры. То, что точно - скорость загрузки для зарубежных пользователей вырастет в разы.

Mood: боевое 
Music: Metallica - Broken, Beat & Scarred
Comments: 5 | Post comment
30.03.09 11:57   |    Цирк или дурдом?  en
 Вчера у нас дома была шиншилья свадьба. А, точнее, сказать, настоящий беспредел. Гуччя загоняла Вирсю так, что когда их рассадили, бедняга орал в истерики часа три без остановки. Просто бой-баба. Видео прилагаются:



Mood: хорошее 
Music: Makai - Beneath the mask
Post comment
01.02.09 17:12   |    Музы пробегала  ru
 Думала, здесь остановиться, но остановилась здесь...

Mood: разговорчивое 
Comments: 4 | Post comment
updated 23.01.09 18:08
23.01.09 18:05   |    Как-то пусто
 ru
 Нет, не по жизни, а в скролле. Давно ничего не писал, в то время как друзья-товарищи Сцип с Пывнем раз за разом ловят муз и используют их в своих корыстных целях.

Значит, что же произошло за это время. В принципе, много чего интересного. Например, сходка мерков, отчет о которой можно посмотреть тут:
http://mercenaries.dclans.ru/ent/meeting.php

Что делали БКшные Мерки - я в ус не дую, но многие утверждают, что этот корпоратив был лучшим из всех. Душевненько посидели, честное слово. На фотках найдете много знакомых лиц: тот костяк, который и был кланом Наемников в БК, до сих пор вместе, только в другом проекте, притащив с собой всю атрибутику топ-клана: сайт, индивидуальные образы и боевую мощь.

Москва до сих пор, кроме серости, ничего не привнесла в мою душу. Да, был один забавный случай, как группа кавказкой национальности пыталась меня слегка обворовать в общественном месте. Ничего не сказал никому: реально было интересно, стащит ли он какую-то рекламную шоколадку, которая случайным образом оказалась у меня в куртке. Не стащил. Не до сладостей людям в кризис.

Здание 6-го управления МВД, где мне удалось побывать просто так, без всяких последствий, приятно удивило: снаружи монументально, внутри так простенько, ходят простые люди, тихо так, уютненько. Хоть подполковник и нарассказывал всяких ужасов про допросы со скорой, ничего подобного мною замечено не было. Следующий раз попрошусь осмотреть подвалы, может там найду чего-нибудь страшное.

Вообще, что интересно, МВД в чинах - сплошь позитивные и умные люди. По долгу работы часто общаюсь с зам. директора нашей полиции, бываю у них в управлении: добрейшей души человек, приятная обстановка, чистота, хороший ремонт, тишина. При том, что в этом же здании сидит отдел по расследованию незаконного оборота наркотиков, контроля проституции и криминальный отдел; проводятся допросы, дознания и прочее. ...А в это время на стенах развешены фотографии с улыбающимися полицейскими, веселыми собаками и смешными моментами с учений. Так почему же до сих пор каждое соприкосновение с низшими чинами выражается в постоянной напряженности и отсутствие ощущения, что кто-то там тебя бережет? Парадокс, хотя... вполне объяснимый. Но, не об этом :)

Конфеты российские - говно. Родители просили больше не привозить всякое там Комильфо, ибо за такие деньги есть огромное количество конфет (те же фабрики Калев) намного более высокого качества. Папа так и сказал: привези мне лучше в следующий раз обычных, простых российских конфет как раньше были. Второй раз привожу - и второй раз бракуют все: родственники, друзья, знакомые. Тенденция, однако. Как кто-то по этому поводу сказал: красивые упаковки делать научились, а вкусные конфеты положить забыли. Вот тебе и сила рекламы...

Кстати, о рекламе. На католическое Рождество был в Юрмале. Да-да, той самой, где проходят всякие там КВНы, Новая Волна и иже с ними. Не знаю, как там в Исландии, но в Латвии все еще хуже, чем в Эстонии. Зал Дзинтарс - убогая лачуга, сарай, сцена пионерского лагеря, если хотите. Единственное, что там обновлено - кассы. Все. А по телевизору Юрмала - так просто рай для туриста. Вот аквапарк - прикольный. Что интересно: в отелях на парковках машины (в основном) с эстонскими номерами. В том же аквапарке - эстонская речь. В отеле только за то, что приехали, готовы сделать и скидку, и баню с бассейном пустить работать в любое время, и постоянная улыбка и безупречный русский. Приятно, однако. Скрывать не буду, наши представители этой области зажрались. Будем надеется, что кризис расставит все на места. А пока в пути по Латвии только и видишь: продается, сдается в аренду; заброшенные дома, гниющие дачи, разворованные санатории. Серо и убого...

Как некоторые уже знают, смена года охарактеризовалась постоянным боданием с представителями компании .masterhost . От общения с ними мне постоянно почему-то вспоминается весьма бородатый анекдот:
Приходят эстонец в публичный дом. Дает 10 долларов и спрашивает, что он может сделать за эти деньги. Администратор отвечает: да только помастурбировать самому себе, пожалуй. Эстонец уходит, возвращается через полчаса и спрашивает: куда отдавать деньги?
Так и тут. За 100 долларов в месяц нам предлагают постоянно "решить проблему самим" или же ее решение берет не дни, а недели. Но при этом создается впечатление, что все это - большое одолжение со стороны хостера.

В общем, кто знает приличного хостера с вменяемым суппортом - пишите координаты, "будем посмотреть". Интересуют площадки класса .masterhost Virtuozzo Standard (http://masterhost.ru/service/hosting/vps/unix/).

На этом, пожалуй, все. Пятница, однако. Чего и вам желаю.

Mood: разговорчивое 
Music: The Beloved - Sweet Harmony
Post comment
updated 21.01.09 12:25
21.01.09 12:21   |    Ны выдержал
 en
 А вообще интересно сидеть под рутом на серваке после того, как ты описал хостеру, что его действия - косяк на косяке.

Итак, проблема: не работает почта (высылка писем с сайта средствами PHP). Т.е. не пашет sendmail. Причина: меняет sender, говорит, что таких серверов нет и так далее.
Обычное решение: добавить apache (httpd) в trusted-user
После этого реинсталлить sendmail.

Так вот... сижу, значит, под рутом и смотрю:
ага, перезапустил почту... послал тестовое письмо... ага, теперь ждет... так-так, снова настройки где-то поменял, перезапустил... письмо туда же... что, опять не получается?.. давай, поменяй еще чего-нибудь...

НО! я не удивлюсь, если в результате этих безуспешных попыток получу письмо от мастерхоста в виде: техническое обслуживание и настройки VPS является головной болью владельца VPS. Почему? Да не поверите, уже получал такое. Только есть один маааленький нюанс: настройка и отладка его работы была произведена специалистами именно этой компании...

Mood: рабочее 
Comments: 3 | Post comment

Total posts: 75 Pages: 8
«« « 1 2 3 4 5 6 7 8 » »»
 
 


« 2024 november »
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

 
 © 2007–2024 «combats.com»
  18+  
feedback