When accessing the auto-increment counter, InnoDB uses a special table-level AUTO-INC lock that it keeps to the end of the current SQL statement, not to the end of the transaction. The special lock release strategy was introduced to improve concurrency for inserts into a table containing an AUTO_INCREMENT column. Nevertheless, two transactions cannot have the AUTO-INC lock on the same table simultaneously, which can have a performance impact if the AUTO-INC lock is held for a long time. That might be the case for a statement such as INSERT INTO t1… SELECT… FROM t2 that inserts all rows from one table into another.
Фактически, это означает что все bulk inserts бодренько выстраиваются в очередь на table lock — per statement, и не особенно то и спасает, что лок в журнал не попадает. Емнип fast mutex прикрутили только в 5.1.
А теперь представьте себе картинку, что это счастье идет в конкурентных транзакциях в параллель, что в транзакции таких инсертов не один, и получим весьма существенный penalty.
А как вам (не шучу!) такие перлы со стороны заказчиков?
0. Подвиньте вот эту надпись на полсантиметра. Какие пиксели? Откуда взял? Я линейкой померял, поднес к своему 30" монитору пластиковую линейку и ей померял! Ну что за хрень — вам понадобилось пять итераций пока сумели отмерить линейкой! Чем вы там вообще занимаетесь?
1. У вас в дереве когда ветка закрыта — плюсик нарисован. А надо — минусик! И мне плевать, что у всех остальных так же, у нас будет лучше. Юзеры поймут, я же понимаю!
2. Вот тут у вас выбор одного из нескольких вариантов (радиогруппа). А чего это у вас вместо галочек кружочки?! Ну вот рядом же галочка в квадратике (чекбокс). Сделайте так же. Никто не запутается, чего вы ввзяли!
3. Молодцы. Сделали. Теперь у вас множественный выбор (чекбоксы) и один из нескольких (радиобатоны) — выглядят одинаково. Это ж вообще непонятно стало! Сделайте мне чтобы когда одиночный переключатель — было кругленьким, ну как до исправлений. Что? Виды чекбокса и радиобатонов поменяются vice versa? Юзеры не поймут? Чего вы со своими юзерами пристали?! У нас они не такие тупые как вам кажется!
4. Почему у вас на формочках такой унылый серый фон? Надо сделать красиво! Что значит "какого цвета"? Как мои гламурные розовые штаны! Что значит какой RGB?! Розовые! А вы что нарисовали? Это цвет задницы а не штанов!
5. Вчера я своим топ-топам показывал вашу демонстрацию. Отлично прошло. Но! Когда я напечатал ее на бумагу, чтобы раздать памятки, то на бумаге анимация не работала! Что значит «невозможно» — на экране же есть!
6. Вы пишете что архиважную фичу вы не смогли сделать так как я вам забыл рассказать что это. Это что — реально повод был эту фичу не делать?!
7. Что значит «почему не отвечаете на емейлы третью неделю»? Футбол смотрю. И вообще, если я хоть час поработаю как вы просите, вы потом месяц будете плакать всей командой, лучше не надо. Да, и какой гад поставил моего босса в СС? Я по ошибке нажал reply all и он меня теперь хочет уволить! Сатрап, считает что футбол надо смотреть не в рабочее время. Некоторое время не буду отвечать — занят в профкоме, надо чтобы не уволили.
Setting HEAP_NO_SERIALIZE eliminates mutual exclusion on the heap. Without serialization, two or more threads that use the same heap handle might attempt to allocate or free memory simultaneously, which may cause corruption in the heap.
Я же имел в виду нечто вот такое, которое вполне себе lock-free thread-safe.
Впрочем, таких реализаций несколько, эта мне сейчас первая в гугле попалась.
Все остальное было скучно и неинтересно, даже и писать-то не о чем. Исправили баги номер… переделали синхронизацию… исправили то то и это… добавили из фичреквеста пункты…
Обычные будни. Кому интересно читать про «как поправили CSS чтобы могучая закладка в 2 строчки текста не разваливала пол-страницы, баг нумер такой-то»?
А вот про особенности оптимизации — по крайней мере есть о чем рассказать.
Так если б я как та бангалорская деревушка — полгодика бы по-повышал производительность с 1 страницы аж до двух — мне бы тоже платили плошку риса в день, не?
Я ведь не только рис ем, да и местный direktsaft тоже недешев. Вот и приходится отжиматься на совесть, а не с 9 до 6 с перерывом на бассейн и трехчасовой ланч.
Мне кстати некоторые заказчики так и говорят — ну ты Виктор и знаешь толк во вкусной и (не)полезной пище — то лапшу тебе японскую, то сок с кокосовым молоком тайский, а если стейк так рибаи! А я им — да полноте, швайнебратен — вот наш выбор!!!, а рибаи да лапша — это я так, эстетствую ;-)
Обычно картинки беру именно там, не надо рисовать самому и с лицензиями порядок.
Вот поясню ход моих мыслей, почему взял именно эти.
1. Ага — ускоряем производительность, то есть устраняем узкие места, или решаем задачу «в одну трубу втекает, в другую вытекает»). Оно.
2. Приступаем к вскрытию — то есть проникаем — проникает кто? спецназ — кто там самый был? аватар.
3. Берем в руки профилировщик — давно шашку в руки не брал — рыцарь — гладиатор.
4. Опасность — бомба (банально) — бережемся от — о! берегите спички от детей!
5. Что делал я — я кто? инженер — вот тебе кульман, расписался тут понимаешь!
6. Плохо — почему? последствия — нос разобьешь — какой пингвин отличный, как раз скользит и падает!
7. Снаряд — пушка (банально), подход — штанга, брутально. О, мультик вспомнил про Спортландию, странно что там лука не было. Точно — лук со снарядами перекликается, беру!
8. Святой Коннектий — святой — фольклор — фея. Опа! в стиле техно, отлично!
Вот уж чего не знаю того не знаю — приехало это именно в таком виде. Может напели заказчику о том как они ускорят по сравнению с (например) питоном, и не смогли?
Я брал libxml2. У нее есть (были?) именно HTML Chunks.
/*
* Summary: interface for an HTML 4.0 non-verifying parser
* Description: this module implements an HTML 4.0 non-verifying parser
* with API compatible with the XML parser ones. It should
* be able to parse "real world" HTML, even if severely
* broken from a specification point of view.
*
* Copy: See Copyright for the status of this software.
*
* Author: Daniel Veillard
*/
Профилирование вещь такая — своеобразная. С ним надо внимательно.
Я как на результаты с локом в msvcrt посмотрел — была первая мысль «а не стащить ли с линукса lock-free memory allocator». Хорошо что удержался от этой (в данном случае) глупости и стал дальше смотреть, а то можно было бы сурово засесть за полировку ногтей вместо решения проблемы.
По факту я тогда за БД и взялся, чтобы мозги прочистились и результаты профилирования сложились бы в какую-то разумную картинку. Помогло — наутро сообразил, что лечить надо не симптомы.
А то статья бы начиналась «и после трех месяцев тупизны и полировки ненужного я догадался посмотреть в профайлере не только первых пять позиций» ;-)
Можно и за $200 — если хотите рискнуть и купить «в случае чего» еще один за $200 через два года.
Хотя как неоднократно показыала практика (см. MS Vista) еще вчера купленный ящик за $500 устаревал так же быстро как и за $200, ибо что на 512М ОЗУ что на 1Гб — виста не шевелилась. А ХР с офисом летала на обоих.
Выйдет к примеру 2015м году Windows 10 с minimum requirements 16GB RAM + VideoCard DX14 compatible, и привет. А тут за 2Гб + HD4000 «по пятьсотбаков уже уплочено» три года назад, удачное будет вложение, да.
(недоумевает) то есть для секретарши просто необходимо купить professional-strength PCs with stable, flexible platforms, aggressive security, & easy expandability?
С предустановленными офисом, акробатом (не ридером) и фотошопом?
Допустим.
В этом случае (рекомендованный m72e vs 3010) — $479 vs $522 соответственно в пользу леновы (за те же ТТХ).
И таки в обоих случаях это знатно меньше заявленных $1k ;-)
When accessing the auto-increment counter, InnoDB uses a special table-level AUTO-INC lock that it keeps to the end of the current SQL statement, not to the end of the transaction. The special lock release strategy was introduced to improve concurrency for inserts into a table containing an AUTO_INCREMENT column. Nevertheless, two transactions cannot have the AUTO-INC lock on the same table simultaneously, which can have a performance impact if the AUTO-INC lock is held for a long time. That might be the case for a statement such as INSERT INTO t1… SELECT… FROM t2 that inserts all rows from one table into another.
Фактически, это означает что все bulk inserts бодренько выстраиваются в очередь на table lock — per statement, и не особенно то и спасает, что лок в журнал не попадает. Емнип fast mutex прикрутили только в 5.1.
А теперь представьте себе картинку, что это счастье идет в конкурентных транзакциях в параллель, что в транзакции таких инсертов не один, и получим весьма существенный penalty.
0. Подвиньте вот эту надпись на полсантиметра. Какие пиксели? Откуда взял? Я линейкой померял, поднес к своему 30" монитору пластиковую линейку и ей померял! Ну что за хрень — вам понадобилось пять итераций пока сумели отмерить линейкой! Чем вы там вообще занимаетесь?
1. У вас в дереве когда ветка закрыта — плюсик нарисован. А надо — минусик! И мне плевать, что у всех остальных так же, у нас будет лучше. Юзеры поймут, я же понимаю!
2. Вот тут у вас выбор одного из нескольких вариантов (радиогруппа). А чего это у вас вместо галочек кружочки?! Ну вот рядом же галочка в квадратике (чекбокс). Сделайте так же. Никто не запутается, чего вы ввзяли!
3. Молодцы. Сделали. Теперь у вас множественный выбор (чекбоксы) и один из нескольких (радиобатоны) — выглядят одинаково. Это ж вообще непонятно стало! Сделайте мне чтобы когда одиночный переключатель — было кругленьким, ну как до исправлений. Что? Виды чекбокса и радиобатонов поменяются vice versa? Юзеры не поймут? Чего вы со своими юзерами пристали?! У нас они не такие тупые как вам кажется!
4. Почему у вас на формочках такой унылый серый фон? Надо сделать красиво! Что значит "какого цвета"? Как мои гламурные розовые штаны! Что значит какой RGB?! Розовые! А вы что нарисовали? Это цвет задницы а не штанов!
5. Вчера я своим топ-топам показывал вашу демонстрацию. Отлично прошло. Но! Когда я напечатал ее на бумагу, чтобы раздать памятки, то на бумаге анимация не работала! Что значит «невозможно» — на экране же есть!
6. Вы пишете что архиважную фичу вы не смогли сделать так как я вам забыл рассказать что это. Это что — реально повод был эту фичу не делать?!
7. Что значит «почему не отвечаете на емейлы третью неделю»? Футбол смотрю. И вообще, если я хоть час поработаю как вы просите, вы потом месяц будете плакать всей командой, лучше не надо. Да, и какой гад поставил моего босса в СС? Я по ошибке нажал reply all и он меня теперь хочет уволить! Сатрап, считает что футбол надо смотреть не в рабочее время. Некоторое время не буду отвечать — занят в профкоме, надо чтобы не уволили.
Вот это были — реальные демотиваторы.
Setting HEAP_NO_SERIALIZE eliminates mutual exclusion on the heap. Without serialization, two or more threads that use the same heap handle might attempt to allocate or free memory simultaneously, which may cause corruption in the heap.
Я же имел в виду нечто вот такое, которое вполне себе lock-free thread-safe.
Впрочем, таких реализаций несколько, эта мне сейчас первая в гугле попалась.
На самом-то деле, как и в любом проекте с длинной историей, там много чего было понаверчено, описанный кусочек — хорошо если 0.1% кода.
Обычные будни. Кому интересно читать про «как поправили CSS чтобы могучая закладка в 2 строчки текста не разваливала пол-страницы, баг нумер такой-то»?
А вот про особенности оптимизации — по крайней мере есть о чем рассказать.
Я ведь не только рис ем, да и местный direktsaft тоже недешев. Вот и приходится отжиматься на совесть, а не с 9 до 6 с перерывом на бассейн и трехчасовой ланч.
Мне кстати некоторые заказчики так и говорят — ну ты Виктор и знаешь толк во вкусной и (не)полезной пище — то лапшу тебе японскую, то сок с кокосовым молоком тайский, а если стейк так рибаи! А я им — да полноте, швайнебратен — вот наш выбор!!!, а рибаи да лапша — это я так, эстетствую ;-)
Обычно картинки беру именно там, не надо рисовать самому и с лицензиями порядок.
Вот поясню ход моих мыслей, почему взял именно эти.
1. Ага — ускоряем производительность, то есть устраняем узкие места, или решаем задачу «в одну трубу втекает, в другую вытекает»). Оно.
2. Приступаем к вскрытию — то есть проникаем — проникает кто? спецназ — кто там самый был? аватар.
3. Берем в руки профилировщик — давно шашку в руки не брал — рыцарь — гладиатор.
4. Опасность — бомба (банально) — бережемся от — о! берегите спички от детей!
5. Что делал я — я кто? инженер — вот тебе кульман, расписался тут понимаешь!
6. Плохо — почему? последствия — нос разобьешь — какой пингвин отличный, как раз скользит и падает!
7. Снаряд — пушка (банально), подход — штанга, брутально. О, мультик вспомнил про Спортландию, странно что там лука не было. Точно — лук со снарядами перекликается, беру!
8. Святой Коннектий — святой — фольклор — фея. Опа! в стиле техно, отлично!
Ежик — означает храбрость (С) КВН
IPv4 only ;-)
— Да в вашем Це два креста вообще плюсов нет!
— Вообще-то есть. Например, я нашел целых два прямо в названии.
;-)
А на С++ я с ходу и не подскажу, куда так смотреть можно. WebCore разве что, или Qt на ночь перечитывать.
А reserve() помогло бы в весьма ограниченном числе мест, т..к. фонтан пересоздаваемых строк никак бы не уменьшился.
Вот для иллюстрации,
Хотя по факту достаточно хранить саму строчку и пачку указателей на ее части.
Я как на результаты с локом в msvcrt посмотрел — была первая мысль «а не стащить ли с линукса lock-free memory allocator». Хорошо что удержался от этой (в данном случае) глупости и стал дальше смотреть, а то можно было бы сурово засесть за полировку ногтей вместо решения проблемы.
По факту я тогда за БД и взялся, чтобы мозги прочистились и результаты профилирования сложились бы в какую-то разумную картинку. Помогло — наутро сообразил, что лечить надо не симптомы.
А то статья бы начиналась «и после трех месяцев тупизны и полировки ненужного я догадался посмотреть в профайлере не только первых пять позиций» ;-)
Хотя как неоднократно показыала практика (см. MS Vista) еще вчера купленный ящик за $500 устаревал так же быстро как и за $200, ибо что на 512М ОЗУ что на 1Гб — виста не шевелилась. А ХР с офисом летала на обоих.
Выйдет к примеру 2015м году Windows 10 с minimum requirements 16GB RAM + VideoCard DX14 compatible, и привет. А тут за 2Гб + HD4000 «по пятьсотбаков уже уплочено» три года назад, удачное будет вложение, да.
С предустановленными офисом, акробатом (не ридером) и фотошопом?
Допустим.
В этом случае (рекомендованный m72e vs 3010) — $479 vs $522 соответственно в пользу леновы (за те же ТТХ).
И таки в обоих случаях это знатно меньше заявленных $1k ;-)