Ръководство за MySQL, 5

Повечето от следните тестове се правят на Linux с помощта на MySQL бенчмаркове, но те трябва да дадат известна представа и за други операционни системи и работни натоварвания.

Най-бързият изпълним код се получава чрез свързване с -static.

Под Linux най-бързият код може да бъде получен чрез компилиране на pgcc с опцията -O3. Компилирането на sql_yacc.cc с тази опция изисква около 200 MB памет, тъй като компилаторът gcc/pgcc заема много памет. Когато конфигурирате MySQL, трябва също да зададете CXX=gcc - така че библиотеката libstdc++ да не е свързана (това не е необходимо). Имайте предвид, че с някои версии на компилатора pgcc полученият код ще работи само на реални процесори Pentium, дори ако използвате способността на компилатора да произведе получения код, който работи на всички x586 процесори (например AMD).

Като просто използвате най-добрия компилатор и/или най-добрата опция за компилатор, можете да получите 10-30% увеличение на скоростта за вашето приложение. Това е особено важно, ако сами компилирате SQL Server!

Тествахме компилатори като Cygnus CodeFusion и Fujitsu, но нито един от тях не беше достатъчно без грешки, за да компилира MySQL с опции за оптимизиране.

Когато компилирате MySQL, трябва да включите само наборите от знаци, които възнамерявате да използвате (опция --with-charset=xxx). Стандартната дистрибуция на MySQL е компилирана с поддръжка за всички кодировки.

По-долу е преглед на някои от действията, които сме предприели, за да ускорим нещата:

  • Когато използвате pgcc и компилирате целия код с -O6, сървърът mysqld е с 1% по-бърз, отколкото с gcc 2.95.2.
  • С динамично свързване(без опцията -static) полученият сървърен изпълним файл ще бъде с 13% по-бавен на Linux. Имайте предвид, че можете безопасно да използвате динамичната библиотека MySQL. Това се отнася само за сървъра и е приложимо само когато е необходима висока производителност.
  • Като премахнете двоичния файл mysqld с strip libexec/mysqld, можете да получите до 4% увеличение на скоростта в получения двоичен файл.
  • Свързването чрез TCP/IP вместо Unix сокети ще бъде 7,5% по-бавно на същата машина (когато се свързва към localhost, MySQL ще използва сокети по подразбиране).
  • При свързване чрез TCP/IP протокол към друг компютър през Ethernet мрежа с честотна лента 100Mbps, скоростта ще бъде с 8-11% по-ниска.
  • При провеждане на нашите сравнителни тестове, използващи защитени връзки (всички данни, криптирани с поддръжка на SSL), скоростта беше с 55% по-ниска.
  • Ако кодът е компилиран с опцията --with-debug=full, тогава за повечето заявки ще има до 20% загуба на производителност, но някои заявки може да отнемат значително повече време (бенчмарковете на MySQL са с 35% по-бавни). При използване на опцията --with-debug се губят само 15% от производителността. Когато изпълнявате mysqld, компилиран с --with-debug=full и --skip-safemalloc, резултатът трябва да е почти същият като при компилиран с --with-debug.
  • На Sun SPARCstation 20, компилаторът SunPro C++ 4.2 работи с 5% по-бързо от компилатора gcc 2.95.2.
  • Компилирането с gcc 2.95.2 за UltraSPARC с опцията -mcpu=v8 -Wa,-xarch=v8plusa дава увеличение на производителността от 4%.
  • Под операционната система Solaris 2.5.1, MIT-pthreads нишки8-12% по-бавно от естествените нишки на Solaris за един процесор. С увеличаване на натоварването на процесорите разликата трябва да е по-голяма.
  • Изпълнението с --log-bin прави MySQL с 1% по-бавен.
  • Компилирането под Linux-x86 с помощта на gcc без -fomit-frame-pointer или -fomit-frame-pointer -ffixed-ebp прави mysqld 1-4% по-бърз.

Линукс дистрибуцията на MySQL, предоставена от MySQL AB, използваше за компилиране с pgcc, но трябваше да се върнем към обикновения gcc компилатор поради грешки в pgcc, който може да генерира код, който не е изпълним на AMD. Докато тези грешки не бъдат коригирани, ние ще продължим да използваме gcc, но ако вашият компютър не е тип AMD, можете да получите по-бърз двоичен код, като го компилирате с pgcc. Стандартният MySQL двоичен файл за Linux е статично свързан, за да бъде по-бърз и по-преносим.

Потребителски коментари

Публикувано от [имейл защитен] в сряда, 19 февруари 2003 г., @ 4:10 сутринта[Изтриване] [Редактиране]

Някой компилирал ли е MySQL с Intel Compiler за Linux и правил ли е някакво сравнение/бенчмаркинг?