- 論壇徽章:
- 0
|
2.12. 具體操作系統(tǒng)相關(guān)的注意事項(xiàng)
2.12.1. Linux注意事項(xiàng)
本節(jié)討論發(fā)現(xiàn)的在Linux中出現(xiàn)的問題。前面幾節(jié)描述了一般操作系統(tǒng)相關(guān)的問題,使用二進(jìn)制或源碼分發(fā)版時(shí)可能出現(xiàn)的問題和安裝后的問題。后面幾節(jié)討論在具體Linux平臺(tái)上出現(xiàn)的問題。
請(qǐng)注意這些問題的大多數(shù)出現(xiàn)在舊的Linux 版本中。如果你運(yùn)行最新的版本,可能不會(huì)發(fā)現(xiàn)這些問題。
2.12.1.1. Linux操作系統(tǒng)注意事項(xiàng)
MySQL至少需要Linux 2.0版本。
警告:我們已經(jīng)發(fā)現(xiàn)在SMP系統(tǒng)中Linux 2.2.14 和MySQL會(huì)出現(xiàn)一些奇怪的問題。我們還收到來自一些MySQL用戶的報(bào)告說他們用內(nèi)核2.2.14使用MySQL時(shí)遇到了嚴(yán)重的穩(wěn)定性問題。如果你正使用該內(nèi)核,應(yīng)當(dāng)升級(jí)到2.2.19 (或更新版)或到2.4內(nèi)核。如果你有一個(gè)多CPU盒,應(yīng)當(dāng)考慮使用2.4,因?yàn)樗艽蟠蠹铀。你的系統(tǒng)將會(huì)更穩(wěn)定。
當(dāng)使用LinuxThreads時(shí),你應(yīng)當(dāng)至少可以看見有三個(gè)mysqld 進(jìn)程在運(yùn)行。這些實(shí)際上是線程。有一個(gè)線程是LinuxThreads管理器,一個(gè)線程處理連接,另一個(gè)線程處理告警和信號(hào)。
2.12.1.2. Linux二進(jìn)制分發(fā)版說明
MySQL的Linux-Intel二進(jìn)制和RPM發(fā)布配置為最高的可能速度。我們一直在嘗試使用可用的最快的穩(wěn)定的編譯器。
二進(jìn)制發(fā)布用-staticis連接,說明一般情況你不需要關(guān)心系統(tǒng)庫(kù)的版本。你也不需要安裝LinuxThreads。用-staticis連接的程序稍微大于動(dòng)態(tài)連接程序,但也稍微快一些(3-5%)。但是,靜態(tài)連接程序的一個(gè)問題是你不能使用用戶定義函數(shù)(UDF)。如果你將要寫或使用UDF(只適用于C或C++ 編程人員),你必須使用動(dòng)態(tài)鏈接自己編譯MySQL。
二進(jìn)制分發(fā)版的一個(gè)已知問題是在使用libc的舊的Linux系統(tǒng)(例如Red Hat 4.x或Slackware)上,你會(huì)遇到一些(非致命)主機(jī)名解析問題。如果系統(tǒng)使用libc沒有使用glibc2,你可能會(huì)遇到一些主機(jī)名解析和getpwnam()問題。這是因?yàn)間libc依靠一些外部庫(kù)來執(zhí)行主機(jī)名解析和getpwent(), 即使用-staticis編譯也如此。這些問題出現(xiàn)在兩個(gè)方面:
· 當(dāng)運(yùn)行mysql_install_db時(shí),你會(huì)看見下面的錯(cuò)誤消息:
· Sorry, the host 'xxxx' could not be looked up你可以通過執(zhí)行mysql_install_db --force來解決該問題,并不在mysql_install_db中執(zhí)行resolveip測(cè)試。不利方面是 你不能在授權(quán)表中使用主機(jī)名:除了localhost,必須使用IP號(hào)。如果你正使用不支持—force的舊版本MySQL,必須使用文本編輯器手動(dòng)卸載mysql_install中的resolveip測(cè)試。
· 當(dāng)你嘗試用--user選項(xiàng)運(yùn)行mysqld時(shí)你還會(huì)看見下面的錯(cuò)誤:
· getpwnam: No such file or directory要解決該問題,使用su命令啟動(dòng)mysqld,不要指定--user選項(xiàng)。這樣使系統(tǒng)自己更改mysqld進(jìn)程的用戶ID,mysqld不再需要這樣做。
另一個(gè)解決辦法可以解決兩個(gè)問題,即不使用二進(jìn)制分發(fā)版。獲得MySQL源碼分發(fā)版(RPM或tar.gz格式)并安裝。
在一些Linux 2.2版本中,當(dāng)客戶端通過TCP/IP建立大量與mysqld服務(wù)器的新連接時(shí),你可能會(huì)遇到錯(cuò)誤Resource temporarily unavailable。該問題是Linux在你關(guān)閉TCP/IP套接字的時(shí)間和系統(tǒng)實(shí)際釋放該套接字的時(shí)間之間有一個(gè)延遲。只有有限數(shù)目的TCP/IP時(shí)段有空間,因此如果客戶端試圖在短時(shí)間內(nèi)建立許多新TCP/IP連接時(shí),你會(huì)遇到源不可用錯(cuò)誤。例如,當(dāng)你通過TCP/IP運(yùn)行MySQL test-connect基準(zhǔn)測(cè)試時(shí)你會(huì)看見該錯(cuò)誤。
我們已經(jīng)多次向不同的 Linux 郵件列表詢問該問題,但是一直沒有找到合適的解決辦法。唯一知道的“解決辦法”是客戶端使用永久連接,或,如果你在同一機(jī)器上運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器和客戶端,使用Unix套接字文件來連接,不要使用TCP/IP連接。
2.12.1.3. Linux源碼分發(fā)版說明
下面關(guān)于glibc的注意事項(xiàng)只適用你自己構(gòu)建MySQL時(shí)。如果在x86機(jī)器上運(yùn)行Linux,在大多數(shù)情況下最好使用我們的二進(jìn)制。我們將二進(jìn)制連接到了我們能找到的打了最好補(bǔ)丁的glibc版本,并使用了最優(yōu)的編譯器選項(xiàng),盡力使它適合高負(fù)荷服務(wù)器。對(duì)于典型用戶,即使對(duì)于超過2GB限制的大量并行連接或表設(shè)置,在大多數(shù)情況下,我們的二進(jìn)制仍然是最佳選擇。閱讀下面的內(nèi)容后,如果你不清楚怎樣做,先試用我們的二進(jìn)制看它是否滿足你的需求。如果你發(fā)現(xiàn)它不夠完善,那么你可以嘗試你自己的構(gòu)建。在這種情況下,我們很希望能看到相關(guān)注釋,以便我們下次可以構(gòu)建更好的二進(jìn)制。
MySQL在Linux上使用 LinuxThreads 。如果你正在使用一個(gè)沒有g(shù)libc2的老的Linux版本,你必須在嘗試編譯MySQL前安裝LinuxThreads。你可以從 http://dev.mysql.com/downloads/os-linux.html獲得LinuxThreads。
注意:當(dāng)你執(zhí)行INSERT DELAYED時(shí),所用的包括2.1.1及以前的glibc版本在pthread_互斥_timedwait()處理上有一個(gè)致命錯(cuò)誤,如果你正在使用INSERT DELAYED,我們建議先升級(jí)glibc。
請(qǐng)注意Linux 內(nèi)核和LinuxThreads庫(kù)默認(rèn)情況下最多可以處理1,024個(gè)線程。如果你計(jì)劃使用超過1,000個(gè)并行連接,需要對(duì)LinuxThreads進(jìn)行一些更改,如下所示:
· 將sysdeps/unix/sysv/linux/bits/local_lim.h中的PTHREAD_THREADS_MAX 增加到4096,將LinuxThreads/internals.h 中的STACK_SIZE減少到256KB。路徑相對(duì)于glibc的根目錄。(請(qǐng)注意如果STACK_SIZE為默認(rèn)值2MB,MySQL有600-1000個(gè)連接時(shí)不穩(wěn)定)。
· 重新編譯LinuxThreads,生成新的libpthreads.a庫(kù),并重新連接MySQL。
可以從http://www.volano.com/linuxnotes.html 查閱關(guān)于LinuxThreads線程限制的詳細(xì)信息。
還有一個(gè)問題會(huì)嚴(yán)重影響MySQL的性能,特別是在SMP系統(tǒng)中。在glibc 2.1的LinuxThreads中,對(duì)于擁有很多只是短時(shí)間內(nèi)占有互斥體的線程的程序,不能很好地執(zhí)行互斥。結(jié)果出現(xiàn)荒謬的現(xiàn)象:在許多情況下,如果你使用未修改的LinuxThreads連接MySQL,從SMP中去掉卸載處理器實(shí)際上會(huì)提高M(jìn)ySQL的性能。我們提供了一個(gè)glibc 2.1.3的補(bǔ)丁來糾正該行為(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch )。
在glibc 2.2.2中,MySQL使用修改后的互斥,這樣甚至比打了補(bǔ)丁的glibc 2.1.3還要好得多。但是,需要注意的是在某些條件下,當(dāng)前glibc 2.2.2中的互斥代碼會(huì)高旋,影響了MySQL的性能。通過優(yōu)化mysqld進(jìn)程到最高優(yōu)先級(jí),可以降低在這種情況下出現(xiàn)這種問題的可能性。我們還可以通過補(bǔ)丁來糾正高旋問題,可以從http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch下載。它集成高旋的糾正、線程最大數(shù)目和堆棧空間于一體。你需要用補(bǔ)丁patch -p0 </tmp/linuxthreads-2.2.2.patch在LinuxThreads目錄下使用。我們 希望在將來的glibc 2.2發(fā)布中能以某種形式將它包括進(jìn)來。在任何情況下,如果你連接glibc 2.2.2,仍然需要糾正STACK_SIZE和 PTHREAD_THREADS_MAX。我們希望在將來能將默認(rèn)值糾正到某種程度上可以接受的值,適合高負(fù)荷MySQL設(shè)置,因此用來產(chǎn)生你自己的構(gòu)建的 命令可以簡(jiǎn)化到到./configure; make; make install。
我們建議你使用這些補(bǔ)丁來構(gòu)建專用的libpthreads.a靜態(tài)版本,并只使用它同MySQL實(shí)現(xiàn)靜態(tài)鏈接。我們知道這些補(bǔ)丁對(duì)于MySQL很安全 并大大改善了它的性能,但是我們還不能斷言它在其它應(yīng)用程序上的效果如何。如果你需要將其它使用LinuxThreads的應(yīng)用程序同打了補(bǔ)丁的靜態(tài)版本的庫(kù)連接,或構(gòu)建一個(gè)打了補(bǔ)丁的共享版本,并將它安裝到系統(tǒng)中,你將自己承擔(dān)風(fēng)險(xiǎn)。
如果你在安裝MySQL的過程中遇到任何奇怪的問題,或一些常用實(shí)用工具被懸掛起來,很可能是庫(kù)或編譯器相關(guān)問題。在這種情況下,使用我們的二進(jìn)制來解決。
如果你連接你自己的MySQL客戶端程序,運(yùn)行時(shí)你會(huì)看見下面的錯(cuò)誤:
ld.so.1: fatal: libmysqlclient.so.# pen failed: No such file or directory使用下面的方法可以避免該問題:
· 用-Wl,r/full/path/to/libmysqlclient.so標(biāo)記連接客戶端,不要使用-Lpath)。
· 將libmysqclient.so復(fù)制到/usr/lib。
· 運(yùn)行客戶端程序前,將libmysqlclient.so所在目錄的路徑名增加到LD_RUN_PATH環(huán)境變量。
如果使用Fujitsu編譯器 (fcc/FCC),編譯MySQ時(shí)可能會(huì)出現(xiàn)一些問題,因?yàn)長(zhǎng)inux頭文件主要面向gcc。以下的configure行應(yīng)當(dāng)結(jié)合fcc/FCC使用:
CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \ -DCONST=const -DNO_STRTOLL_PROTO" \CXX=FCC CXXFLAGS="-O -K fast -K lib \ -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE \ -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \ '-D_EXTERN_INLINE=static __inline'" \./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static --disable-shared \ --with-low-memory2.12.1.4. Linux后期安裝注意事項(xiàng)
在MySQL安裝目錄或MySQL源碼樹下的support-files目錄下可以找到mysql.server。你可以將它安裝為/etc/init.d/mysql,以便自動(dòng)啟動(dòng)和關(guān)閉MySQL。請(qǐng)參見2.9.2.2節(jié),“自動(dòng)啟動(dòng)和停止MySQL”。
如果MySQL不能打開足夠的文件或連接,可能是你沒有將Linux配置為處理足夠的文件。
在Linux 2.2及以上版本中,你可以檢查分配的文件的數(shù)目:
shell> cat /proc/sys/fs/file -maxshell> cat /proc/sys/fs/dquot-maxshell> cat /proc/sys/fs/super-max如果有超過16MB的內(nèi)存,應(yīng)當(dāng)在啟動(dòng)腳本中增加如下內(nèi)容(例如,在SuSE Linux中:/etc/init.d/boot.local):
echo 65536 > /proc/sys/fs/file-maxecho 8192 > /proc/sys/fs/dquot-maxecho 1024 > /proc/sys/fs/super-max還可以用root從命令行運(yùn)行echo命令,但是下一次重新啟動(dòng)計(jì)算機(jī)時(shí)這些設(shè)定值會(huì)丟掉。
另外,可以使用許多Linux分發(fā)版使用的sysctl工具設(shè)置啟動(dòng)參數(shù)(包括SuSE Linux 8.0和以后版本)。將下面的值放到文件 /etc/sysctl.conf中:
# Increase some values for MySQLfs.file-max = 65536fs.dquot-max = 8192fs.super-max = 1024你還應(yīng)將以下內(nèi)容加入/etc/my.cnf:
[mysqld_safe]open-files-limit=8192這樣服務(wù)器連接和打開文件的總數(shù)目可以達(dá)到8,192。
LinuxThreads的STACK_SIZE常數(shù)控制在尋址空間中線程堆棧的占用空間。它需要足夠大,以保證每個(gè)線程堆棧有足夠的空間,但是應(yīng)足夠小,防止某些線程的堆棧運(yùn)行全局mysqld數(shù)據(jù)。遺憾的是,根據(jù)我們的發(fā)現(xiàn),如果你用mmap()映射目前正使用的尋址,Linux成功運(yùn)行 后不會(huì)映射映射區(qū),將會(huì)清空整個(gè)地址頁(yè)上的數(shù)據(jù)而不會(huì)返回錯(cuò)誤信息。因此,mysqld或其它線程應(yīng)用程序的安全依靠創(chuàng)建線程的代碼的“紳士”行為。用戶必須采取措施以確保在任何時(shí)間運(yùn)行線程的數(shù)目相對(duì)線程堆棧應(yīng)足夠低,以防止全局堆內(nèi)存。使用mysqld時(shí),你應(yīng)當(dāng)為max_connections變量設(shè)置合理的值強(qiáng)制該行為。
如果你自己構(gòu)建MySQL,你可以為L(zhǎng)inuxThreads打補(bǔ)丁以便更好地使用堆棧。請(qǐng)參見2.12.1.3節(jié),“Linux源碼分發(fā)版說明”。如果你不想為L(zhǎng)inuxThreads打補(bǔ)丁,你應(yīng)當(dāng)將max_connections的值設(shè)置為不超過500。如果你有大的關(guān)鍵字緩沖區(qū)、大的堆內(nèi)存表,或其它使mysqld分配大量?jī)?nèi)存的東西,或如果你用2GB的補(bǔ)丁運(yùn)行2.2內(nèi)核,max_connections的值應(yīng)當(dāng)更低。如果你正使用我們的二進(jìn)制或RPM版本,可以安全地將max_connections設(shè)置為1500(假定沒有大的關(guān)鍵字緩沖區(qū)或有大量數(shù)據(jù)的堆內(nèi)存表。將LinuxThreads中的STACK_SIZE降低得越低,可以安全地創(chuàng)建越多的線程。我們推薦的值的范圍為128KB到256KB。
如果你正使用大量的并行連接,在2.2內(nèi)核中你可能會(huì)遇到一個(gè)“特性”,即通過對(duì)進(jìn)程的分支或克隆子進(jìn)程的行為進(jìn)行罰分,來試圖防止轟炸攻擊。這樣你增加并行客戶端的數(shù)量時(shí),MySQL不能正確響應(yīng)。在單CPU系統(tǒng)中,我們已經(jīng)發(fā)現(xiàn)該現(xiàn)象,即線程創(chuàng)建地很慢;連接MySQL的時(shí)間很長(zhǎng)(長(zhǎng)達(dá)1分鐘),并且關(guān)閉的時(shí)間也很長(zhǎng)。在多CPU系統(tǒng)中,我們已經(jīng)觀察到隨著客戶端數(shù)目的增加,查詢速度逐漸下降。在尋求解決辦法的過程中,我們收到了一個(gè)用戶的內(nèi)核補(bǔ)丁,他聲稱該補(bǔ)丁可以解決他的問題。從http://www.mysql.com/Downloads/Patches/linux-fork.patch可以下載該補(bǔ)丁。我們已經(jīng)在開發(fā)和生產(chǎn)系統(tǒng)上對(duì)該補(bǔ)丁進(jìn)行了廣泛的測(cè)試。它可以大大改善MySQL的性能,而不會(huì)造成任何問題,我們向仍然在2.2內(nèi)核運(yùn)行高負(fù)荷服務(wù)器的用戶推薦它。
在2.4內(nèi)核中已經(jīng)對(duì)該問題進(jìn)行了修復(fù),因此如果你不滿意當(dāng)前系統(tǒng)的性能,不要為2.2 內(nèi)核打補(bǔ)丁,在SMP系統(tǒng)中升級(jí)到2.4版要容易地多,升級(jí)不僅可以修復(fù)錯(cuò)誤,還可以使SMP更好地加速。
我們已經(jīng)在雙CPU機(jī)器上在2.4內(nèi)核中對(duì)MySQL進(jìn)行了測(cè)試,發(fā)現(xiàn)MySQL的比例要好得多。1,000名客戶查詢時(shí),還看不到速度有實(shí)質(zhì)上的下降,MySQL的比例因子(最大吞吐量與一個(gè)客戶端的吞吐量的比例)為180%。我們?cè)谒?CPU系統(tǒng)中也觀察到了類似的結(jié)果:當(dāng)客戶數(shù)目上升到1,000名時(shí)還沒有實(shí)質(zhì)上的減慢, 比例因子為300%。根據(jù)這些結(jié)果,對(duì)于使用2.2內(nèi)核的高負(fù)荷SMP服務(wù)器,我們絕對(duì)建議升級(jí)到 2.4內(nèi)核。
我們已經(jīng)發(fā)現(xiàn),在2.4內(nèi)核中應(yīng)使用可能的最高優(yōu)先級(jí)來運(yùn)行mysqld進(jìn)程,以獲得最佳性能。可以通過為mysqld_safe加renice -20 $$命令來實(shí)現(xiàn)。在四-CPU系統(tǒng)中的測(cè)試中,提高優(yōu)先級(jí)在400個(gè)客戶時(shí)會(huì)使吞吐量增加60%。
我們目前還想搜集關(guān)于MySQL在four-way和eight-way系統(tǒng)上用2.4內(nèi)核執(zhí)行的性能的更詳細(xì)信息。如果你訪問了這些系統(tǒng)并進(jìn)行了一些基準(zhǔn)測(cè)試,請(qǐng)將結(jié)果用email發(fā)送到<benchmarks@mysql.com>。我們將對(duì)它們進(jìn)行審查以包括進(jìn)手冊(cè)中。
如果用ps運(yùn)行mysqld服務(wù)器進(jìn)程時(shí)發(fā)現(xiàn)進(jìn)程死掉了,一半是MySQL中有缺陷或數(shù)據(jù)庫(kù)表崩潰了。請(qǐng)參見A.4.2節(jié),“如果MySQL依然崩潰,應(yīng)作些什么”。
如果mysqld死掉并給出SIGSEGV信號(hào),要想在Linux中對(duì)內(nèi)核進(jìn)行調(diào)試,你可以用--core-file選項(xiàng)啟動(dòng)mysqld。注意你還可能需要通過向mysqld_safe添加ulimit -c 1000000或用--core-file-size=1000000啟動(dòng)mysqld_safe來加大內(nèi)核文件的大小。請(qǐng)參見5.1.3節(jié),“mysqld_safe:MySQL服務(wù)器啟動(dòng)腳本”。
2.12.1.5. Linux x86注意事項(xiàng)
MySQL需要5.4.12或更新版本的libc。已知它可以在libc 5.4.46中工作。glibc 2.0.6和更新版本應(yīng)當(dāng)也可以工作。Red Hat的glibc RPM有一些問題,因此如果你遇到問題,應(yīng)看看是否有更新版。已知glibc 2.0.7-19和2.0.7-29 RPM可以工作。
如果你正使用Red Hat 8.0或更新的glibc 2.2.x庫(kù),你會(huì)看見mysqld執(zhí)行g(shù)ethostbyaddr()時(shí)會(huì)死掉。這是因?yàn)樾碌膅libc庫(kù)在執(zhí)行該調(diào)用時(shí)需要大于128KB的堆?臻g。要想修復(fù)該問題,用--thread-stack=192K選項(xiàng)啟動(dòng)mysqld。(在MySQL 4以前的版本中應(yīng)使用-O thread_stack=192K)。 在MySQL 4.0.10和以上版本中,該堆?臻g值即為默認(rèn)值,因此你不會(huì)看見該問題。
如果你正使用gcc 3.0和以上版本編譯MySQL,在編譯MySQL前你必須先安裝libstdc++v3庫(kù);如果不這樣做,在聯(lián)接過程中會(huì)遇到關(guān)于丟失__cxa_pure_virtual符號(hào)的錯(cuò)誤。
在一些舊的Linux分發(fā)版中,configure會(huì)生成如下錯(cuò)誤:
Syntax error in sched.h. Change _P to __P in the/usr/include/sched.h file.See the Installation chapter in the Reference Manual.只需要按照錯(cuò)誤消息的提示操作。對(duì)只有一條下劃線的_P名再增加一條下劃線,然后重新嘗試。
編譯時(shí)可能會(huì)出現(xiàn)警告。下面的警告可以忽略:
mysqld.cc -o objs-thread/mysqld.omysqld.cc: In function `void init_signals()':mysqld.cc:315: warning: assignment of negative value `-1' to`long unsigned int'mysqld.cc: In function `void * signal_hand(void *)':mysqld.cc:346: warning: assignment of negative value `-1' to`long unsigned int'如果mysqld啟動(dòng)時(shí)總是出現(xiàn)轉(zhuǎn)儲(chǔ)內(nèi)核, 問題可能是你使用了舊的/lib/libc.a。嘗試重新對(duì)其命名,然后刪掉sql/mysqld并重新執(zhí)行make install然后再次嘗試。已經(jīng)報(bào)導(dǎo)在部分Slackware安裝中出現(xiàn)了該問題。
當(dāng)鏈接mysqld時(shí)如果出現(xiàn)下面的錯(cuò)誤,說明libg++.a安裝不正確:
/usr/lib/libc.a(putc.o): In function `_IO_putc':putc.o(.text+0x0): multiple definiti在of `_IO_putc'你可以使用libg++.a運(yùn)行configure來避免該問題:
shell> CXX=gcc ./configure2.12.1.6. Linux SPARC注意事項(xiàng)
在部分執(zhí)行過程中,readdir_r()會(huì)中斷,F(xiàn)象是SHOW DATABASES語句總是返回空子集?梢栽谕瓿膳渲、進(jìn)行編譯前從config.h中刪掉HAVE_READDIR_R來修復(fù)。
2.12.1.7. Linux Alpha注意事項(xiàng)
我們已經(jīng)用我們的基準(zhǔn)和測(cè)試套件在Alpha中測(cè)試了MySQL 5.1,看起來工作得不錯(cuò)。
我們目前在配置Alpha EV6處理器的Compaq DS20機(jī)器上,在SuSE Linux 7.0中對(duì)AXP、內(nèi)核2.4.4-SMP、Compaq C編譯器(V6.2-505)和Compaq C++編譯器(V6.3-006)構(gòu)建MySQL二進(jìn)制軟件包。
你可以從 http://www.support.compaq.com/alpha-tools/ 找到上述編譯器。使用這些編譯器,得到的MySQL性能比gcc要好9-14%。
在Alpha版MySQL中,我們?cè)诰幾g選項(xiàng)中使用-arch generic標(biāo)記,可以確保二進(jìn)制在所有Alpha處理器中運(yùn)行。我們還采用靜態(tài)編譯以避免庫(kù)問題。configure命令應(yīng)為:
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \CXXFLAGS="-fast -arch generic -noexceptions -nortti" \./configure --prefix=/usr/local/mysql --disable-shared \ --with-extra-charsets=complex --enable-thread-safe-client \ --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared 如果想要使用egcs,可以使用下面的configure行:
CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \./configure --prefix=/usr/local/mysql --disable-shared已知的在Linux-Alpha中運(yùn)行MySQL的問題:
· 在gdb 4.18 中不能調(diào)試線程應(yīng)用程序。你應(yīng)當(dāng)使用gdb 5.1。
· 使用gcc時(shí)如果你嘗試靜態(tài)鏈接mysqld,啟動(dòng)時(shí)映像會(huì)導(dǎo)致轉(zhuǎn)儲(chǔ)內(nèi)核。換句話說,使用gcc時(shí)不要使用--with-mysqld-ldflags=-all-static。
2.12.1.8. Linux PowerPC注意事項(xiàng)
MySQL應(yīng)當(dāng)可以在使用最新glibc安裝軟件包(用glibc 2.0.7測(cè)試)的MkLinux上工作。
2.12.1.9. Linux MIPS注意事項(xiàng)
為了使MySQL在Qube2(Linux Mips)上工作,需要最新的glibc庫(kù)。已知glibc-2.0.7-29C2可以工作。還必須使用egcs C++編譯器(egcs 1.0.2-9、gcc 2.95.2或更新版)。
2.12.1.10. Linux IA-64注意事項(xiàng)
要想讓MySQL在Linux IA-64中編譯,我們用 gcc 2.96構(gòu)建時(shí)使用下面的configure命令:
CC=gcc \CFLAGS="-O3 -fno-omit-frame-pointer" \CXX=gcc \CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" \ ./configure --prefix=/usr/local/mysql \ "--with-comment=Official MySQL binary" \ --with-extra-charsets=complex在IA-64中,MySQL客戶端二進(jìn)制使用共享庫(kù)。這意味著如果你將我們的二進(jìn)制分發(fā)版安裝到/usr/local/mysql之外的其它位置,需要將libmysqlclient.so安裝目錄路徑加到/etc/ld.so.conf文件或LD_LIBRARY_PATH環(huán)境變量中。
參見A.3.1節(jié),“與MySQL客戶端庫(kù)的鏈接問題”。 |
|