Безплатен MySQL под Windows за сметка на?

MySQL е доста разпространена база данни. Причините са много: безплатен (само т.нар. Community Server), с отворен код, има версии за линукс и Windows, производителен е, “просто работи”,работи в мрежаи т.н. Под Windows можете да го инсталирате като самостоятелен продукт или в комплект с php иApache(wamp, xampp). Често се инсталира на работна станция от хора, които разработват web или други приложения.

И всичко щеше да е много хубаво, ако след излизане от режим hibernate не ми се случваше това:

[singlepic=157,260]

На картинката се вижда моя десктоп, но не такъв, какъвто искам да бъде. Wallpaper-ът е размазан, и по-интересното: даже и системните бутони са размазани. Това състояние може да се обясни от две неща: бъгав драйвер за видеокартата или липса на ресурси.

След малко разследване версията за бъгав драйвер отпадна. Започнах да търся къде аджеба на моята машина с 3 GB RAM й липсват ресурси…

Това, което открих меко казано ме изненада:

[singlepic=158,220]

Всичко изглеждаше нормално освен броя на т.нар. манипулатори (Handles). 62000 манипулатора е някаква безумна стойност. Нормално броят им не надхвърля 20000.
На въпроса “кой изяжда толкова много манипулатори?” си отговорих лесно:

[singlepic=159,220]

* Тази снимка е от друга машина, на която е инсталиран MySQL.

Манипулаторите (т.нар. Handles) опростено могат да се смятат за нещо като указатели към обектите на операционната система:

Users: Window, Cursor, Menu и т.н.
GDI: всички графични обекти, като Brush, Pen и т.н.
Kernel: Access token (ACL), Console input, Event, File, Heap, Mutex, Pipe, Process, Semaphore, Socket, Thread, Timer и т.н.

Те се съхраняват в резервирано от ядрото на операционната система пространство от паметта, наречено Paged Pool. Под Windows 2000/XP големината на Paged Pool е около 300 МБ. Проблемът е, чев Paged Pool се съхранява и друга информация и тази памет може да свърши много бързо. Нещо подобно се беше случило и при мен.

Причината за голямата консумация на манипулатори при MySQL се крие в engine-ите, които се използват и по-точно: InnoDB [http://lists.mysql.com/win32/18685 ].Според документацията на InnoDB предимството пред останалите компоненти е поддържката натранзакци:

[http://en.wikipedia.org/wiki/Database_transaction ];
[ http://c2.com/cgi/wiki?TransactionProcessing];

Поддръжката на транзакциите, заключването на записите на ниско ниво и др. вероятно са нещата, които консумират много манипулатори във вид на Mutex-и, Semaphore-и, Event-и, Нишки и т.н.

Е, имам въпрос: ако използваме MySQL за тестови цели под Windows с тривиални заявки (аз лично не съм виждал в чужд Web код неща като: BEGIN TRANSACTION, COMMIT и т.н., а Вие?) нужен ли ни е InnoDB?
[http://www.mysqltutorial.org/understand-mysql-table-types-innodb-myisam.aspx ]

Май…не? 🙂

Ако все пакискате да разберете какви са разликите и да направите своя правилен избор разгледайте тези връзки:

Смятах, смятах и заключих (на базата на горните връзки), че приемлив избор е MyISAM за engine в MySQL. 🙂

Изключване на поддръжката на InnoDB.
За щастие забраняването на InnoDB е възможно. Вариантите са два:

прекомпилиране на Windows версията. Това не е по силите на всеки, но е възможно. Инструкции ще намерите тук:[http://dev.mysql.com/doc/refman/5.0/en/windows-source-build.html ]

чрез настройка в конфигурационния файл My.ini. Параметърът се наричаskip-innodb.

Изключване на поддръжката на InnoDB чрез параметъра skip-innodb.

  • Подготовка.
    • Мигриране на съществуващи InnoDB таблици.
      Преди да забраните InnoDB се уверете, че всички таблици са в различен от InnoDB формат. Конвертирането им става по следния начин:
      [code]ALTER TABLE myTable ENGINE = MYISAM;[/code]
    • Задаване на engine по подразбиране. Отворете My.ini и намерете реда, който започва с “default-storage-engine=…”. В дясната част сложете името на engin-а, който сте си избрали. В случая това е MyISAM и редът ще изглежда така: default-storage-engine=MYISAM

Ако пропуснете тези две стъпки стартирането на MySQL ще завърши с грешка: “Unknown/unsupported table type: INNODB”

  • Изключване на InnoDB.
    • Отворете конфигурационния файл на MySQL – My.ini. Обикновено той се намира в:“C:\Program Files\MySQL\MySQL Server 5.1”;
    • Намерете реда #skip-innodb и премахнете знака диез (#). Запишете файла.
    • Рестартирайте MySQL.

Ако всичко е наред в event viewer ще видите следното съобщение:

    • Event Type:Information
      Event Source:MySQL
      Event Category:None
      Event ID:100
      Date:25.07.2009 г.
      Time:20:18:22
      User:N/A
      Computer:XXXX
      Description:
      Plugin ‘InnoDB’ disabled by command line option

That’s it! 🙂

Благодарности на И.Танев и Н.Горанов за насоките, които помогнаха за разбулването на мистерията около размазания ми десктоп 🙂 🙂 🙂

2 thoughts on “Безплатен MySQL под Windows за сметка на?

  1. Като става въпрос за handles – виж 64bit драйвери на nvidia за Vista/7 (190.38), и по-специално процесът за Stereo образ в игрите. Под горенаписаните имаше към 25-30k отгоре… Случваше се само като си пуснеш каква да е игра с 3D поддръжка, а в драйверът изрично го бях спрял тоя фийчър 🙂 С махането на stereo драйвера се оправи работата. Проблем с DirectX-са или някаква несъвместимост на драйвера с игрите – who knows

  2. странно при мен има същия проблем с уолпапера след излизане от хибернация.
    броя на хандлерите е около 20500

    но аз нямам mysql
    но имам програмата webshots desktop
    и тя има странно поведение след около час работа след рестартиране изведнъж става невъзможно да се смени картината на десктопа – преди десктопа направо ставаше черен – точно като при проблем с невалиден сериен номер , но при валиден сериен номер и без съобщение за това че уиндоус не ми е оригинален. после след инсталиране на някакви упдеъти екрана спря да става черен – става с цвета на фона а картинката си стои но когато се придвижи някой прозорец след него картинката не се появява .
    може да се сложи картинка само ако е в режим tile Или center а в режим stretch или ако картинката е по голяма от 1024х780 не се появява на десктопа.
    ако се премине в хибернация скоро след рестарт излизането от хибернация си е нормално , но ако се премине в хибернация след като се е появил проблема с уалпапера , излизането от хибернация е проблематично – не става от първия път а трябват няколко рестарта и след излизането картинката на десктопа и някои от иконите са така като чели са цвета на пикселите им е избран по случаен начин , забелязал сам че този проблем с картинката на десктопа се предшества от многократно примигване на иконките на десктопа – така като чели е избрана опцията refresh от контекстното меню , и друго което ми се струва свързано с проблема:ако се опитам да стартирам 16 битово приложение се получава грешка че няма ресурси ,
    а ако се опитам да променя разделителната способност на екрана – тя не се променя но се появява прозореца който пита дали виждаме изображението , и когато натиснем “yes” , без всякакво предизвестие се задейства функцията по рестартиране и след секунди компютъра се рестартира . какво ли не пробвах , нито антивирус , нито firewall нищо не помага , не помага и repair опцията на сетъпа на уиндоус , не помага и инсталиране на ново (без форматиране на диска) а до форматиране не ми се иска да стигна,
    не е и хардуерен проблем – linux си работи без проблеми.

    дали може някой да помогне ?

Leave a Reply

Your email address will not be published. Required fields are marked *