Mar 08
我利用前兩天的空閒時間寫了個 PHP 的小程式,運用 PHP 的 PDO 元件,對 MySQL 進行小測試。
Server 作業系統與硬體:
- 作業系統:FreeBSD 8.0-RELEASE
- CPU:Intel(R) Pentium(R) 4 CPU 3.00GHz (3042.62-MHz 686-class CPU),Hyper-Threading 開啟
- RAM:2G DDR2 800
- 放資料庫的 HDD:WDC WD800JB-00JJA0,UDMA 100
MySQL 5.1.44 的設定(/etc/my.cnf):
# defult setting (maybe changed)
key_buffer_size = 128M
max_allowed_packet = 4M
table_open_cache = 4096
sort_buffer_size = 1M
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
# added for tunning by Joe Horn
skip-name-resolve
connect_timeout = 60
join_buffer_size = 1M
max_connect_errors = 10000
max_connections = 100
max_heap_table_size = 1G
query_cache_size = 16M
slave_net_timeout = 30
sync_binlog=1
thread_cache_size = 512
thread_concurrency = 8
tmp_table_size = 1G
table_definition_cache = 512
# choose one ( depend on query amount )
#concurrent_insert=2
low_priority_updates=1
這台機器跑 Super Smack 的結果:
# super-smack -d mysql update-select.smack 80 1000
Query Barrel Report for client smacker
connect: max=14ms min=1ms avg= 4ms from 80 clients
Query_type num_queries max_time min_time q_per_s
select_index 80000 101 6 717.91
update_index 80000 108 1 717.91
我用測試程式產生了一百萬筆資料的 MyISAM table,各種測試各循環 1000 次,產生如下的測試結果(後面的數字單位是秒):
SELECT BY PK_COL WITH_QUERY_CACHE: 0.058
SELECT BY PK_COL WITHOUT_QUERY_CACHE: 0.062
SELECT BY PK_COL LIMIT WITH_QUERY_CACHE: 0.058
SELECT BY PK_COL LIMIT WITHOUT_QUERY_CACHE: 0.062
SELECT BY UNIQUE_COL WITH_QUERY_CACHE: 0.058
SELECT BY UNIQUE_COL WITHOUT_QUERY_CACHE: 0.062
SELECT BY UNIQUE_COL LIMIT WITH_QUERY_CACHE: 0.058
SELECT BY UNIQUE_COL LIMIT WITHOUT_QUERY_CACHE: 0.062
SELECT BY INDEX_COL WITH_QUERY_CACHE: 0.058
SELECT BY INDEX_COL WITHOUT_QUERY_CACHE: 0.061
SELECT BY INDEX_COL LIMIT WITH_QUERY_CACHE: 0.058
SELECT BY INDEX_COL LIMIT WITHOUT_QUERY_CACHE: 0.063
SELECT BY COL WITH_QUERY_CACHE: 0.786
SELECT BY COL WITHOUT_QUERY_CACHE: 0.063
SELECT BY COL LIMIT WITH_QUERY_CACHE: 0.059
SELECT BY COL LIMIT WITHOUT_QUERY_CACHE: 0.062
UPDATE BY PK_COL WITH_QUERY_CACHE: 1.139
UPDATE BY PK_COL WITHOUT_QUERY_CACHE: 1.199
UPDATE BY PK_COL LIMIT WITH_QUERY_CACHE: 0.125
UPDATE BY PK_COL LIMIT WITHOUT_QUERY_CACHE: 0.142
UPDATE BY UNIQUE_COL WITH_QUERY_CACHE: 2.734
UPDATE BY UNIQUE_COL WITHOUT_QUERY_CACHE: 1.203
UPDATE BY UNIQUE_COL LIMIT WITH_QUERY_CACHE: 0.147
UPDATE BY UNIQUE_COL LIMIT WITHOUT_QUERY_CACHE: 0.163
UPDATE BY INDEX_COL WITH_QUERY_CACHE: 1.183
UPDATE BY INDEX_COL WITHOUT_QUERY_CACHE: 1.063
UPDATE BY INDEX_COL LIMIT WITH_QUERY_CACHE: 0.138
UPDATE BY INDEX_COL LIMIT WITHOUT_QUERY_CACHE: 0.154
UPDATE BY COL WITH_QUERY_CACHE: 4704.859
UPDATE BY COL WITHOUT_QUERY_CACHE: 4641.191
UPDATE BY COL LIMIT WITH_QUERY_CACHE: 0.156
UPDATE BY COL LIMIT WITHOUT_QUERY_CACHE: 0.167
根據測試結果,大概可以看到出以下幾個要點:
- 根據第 21 行與 22 行的差異看來,MySQL Query cache 還是有點用處,不過效用不大。
- 根據第 13 行與第 29 行的結果看來,有沒有設定 Primary Key、UNIQUE、INDEX 的影響不小。
- 根據 UPDATE 語法的測試結果看來,有沒有 LIMIT 頗重要。
Technorati Tags: FreeBSD, INDEX, LIMIT, MySQL, PDO, PHP, Primary Key, Query Cache, Super Smack, UNIQUE
Tags:
FreeBSD ,
INDEX ,
LIMIT ,
MySQL ,
PDO ,
PHP ,
Primary Key ,
Query Cache ,
Super Smack ,
UNIQUE
(Visited 253 times)
Mar 02
在 1 月底,我開始使用 FreeBSD Port Tools 來製作/修改 FreeBSD ports。
因為太好用了,使得我在一個月左右時間內,整整送了 10 個 FreeBSD PR(我知道這種量不值一提,但對我來說,這是目前為止的尖峰值)。
對 FreeBSD ports 有興趣的人,請先詳讀一下這個討論串。
針對 FreeBSD Port Tools 的使用,大概要注意的是:
- 要送出前,請先用 port test 測試過,並記得用 -- 參數來測試所有的 make 參數與選項。
- 修改 ports,但只是 patch,不是版本更新時,請用 port submit -m change,並記得修改 Synopsis。
- 對 ports 進行版本更新時,請用 port submit -m update。
- 製作新的 ports 時,請用 port submit -m new。
至於 FreeBSD ports 的部份,大概要注意這些:
- 如果是 PHP Web systems/projects,要先下載後解開,花點時間檢查該系統需要哪些 PHP extensions。可以參考 PHP 的 Function Reference,例如:mbstring 可以用 grep -r "mb_*" [PHP_PROJECT_ROOT_DIR]。
- 如果要在安裝後顯示的 pkg-message,或是 pkg-plist 帶入變數,建議在 [PORT_DIRECTORY]/files 放 pkg-message.in 或 pkg-plist.in 這種檔案。
- 儘量在 Makefile 使用變數,主要(常用)的變數可以參考 /usr/ports/Mk/bsd.port.mk,其他的請參考 /usr/ports/Mk/ 底下的其他檔案。
由於我還算是新手小嫩咖,目前只能提供以上的心得(順便留個筆記)... orz
Technorati Tags: FreeBSD, ports, porttools
Tags:
FreeBSD ,
ports ,
porttools
(Visited 507 times)
Jan 08
昨天,FreeBSD 官方發布了三個 Security Advisories:
根據 Advisories 內容,我原本打算透過以下的步驟作 patch:
- cd /usr/src && make update
- cd /usr/src/lib/bind && make obj && make depend && make && make install
- cd /usr/src/usr.sbin/named && make obj && make depend && make && make install
- cd /usr/src/usr.sbin/ntp/ntpd && make obj && make depend && make && make install
- cd /usr/src && make kernel
- [REBOOT]
但是,進行到第 4 個步驟(FreeBSD-SA-10:02.ntpd 的編譯階段),就出現了如下的 message:
make: don't know how to make /usr/obj/usr/src/usr.sbin/ntp/ntpd/../libparse/libparse.a. Stop
找了一些討論後,我在這個討論串裡看到好幾種作法。
幾經嘗試,我最終在 FreeBSD 8.0-RELEASE-p1 amd64 用以下這個作法順利編譯成功:
- cd /usr/src/usr.sbin/ntp
- rm -rf /usr/obj/*
- make obj && make depend && make && make install
有相同問題(狀況)的人可以參考看看。
Technorati Tags: FreeBSD, patch, Security Advisories
Tags:
FreeBSD ,
patch ,
Security Advisories
(Visited 1700 times)
Sep 03
除了已知的效能差異(以前用 Ubench 測過的,gaod 長輩也貢獻了一些資訊,都 紀錄在這)、預設支援的記憶體容量之外,這兩天又找出另外一項。
某台機器跑 FreeBSD i386 platform,搭配 PAE 與 SMP。
根據以往的經驗,這種記憶體容量超過 4G 的機器,我會選 amd64 platform。
(至少經手過的幾台機器到現在都很健康...)
近來這台機器的 MySQL daemon process 時常會掛掉...
追蹤 error log 之後,發現這種錯誤訊息:
Out of memory (Needed 16391 bytes)
我把錯誤訊息丟上 Google 後,才發現 FreeBSD i386 platform 版本,其預設之單 process 記憶體容量限制為 512 MB,而 MySQL daemon process 使用超過 512 MB 後就會噴出上述的錯誤訊息,接著就是嗝屁...
我沒碰過這種瓶頸,似乎是 amd64 platform 沒有這種限制。
i386 platform 遭遇到這種瓶頸的解法是在 /boot/loader.conf 裡面丟進類似這三行:
kern.maxdsiz="2G"
kern.dfldsiz="2G"
kern.maxssiz="256M"
(拉高單 process 的記憶體容量限制,變為 2G)
然後 reboot,準備驗收成果...
Technorati Tags: amd64, FreeBSD, i386, MySQL
Tags:
amd64 ,
FreeBSD ,
i386 ,
MySQL
(Visited 9553 times)
May 23
自從 上次的 PHP 地雷事件 後, 目前手上兩三台有裝 CPG 跟 phpBB 的機器一直停在 PHP 4.4.0 .
可是現在要用 ports 升級 phpMyAdmin 卻會失敗, 還噴這串出來 :
This port requires the Apache Module or the CGI version of PHP, but you have already installed a PHP port without them.
*** Error code 1
跑到 /usr/ports/lang/php4 底下用 make config 把 Apache module 加進去, 還是會噴上面這串...
目前 ports 裡面, PHP4 最新的版本是 4.4.2 , PHP5 是 5.1.4 , phpBB 的版本是 2.0.20 , CPG 是 1.4.6 .
麻煩有裝以上這些系統的好心的前輩提燈籠來指個路啊.
Technorati Tags: Coppermine, FreeBSD, PHP, phpBB
Tags:
Coppermine ,
FreeBSD ,
PHP ,
phpBB
(Visited 4202 times)
Dec 28
前幾天送了個 pr ( problem report ) 回去給總部, 順便在這邊說一下好了, 反正太久沒寫 Blog .
這個 pr 是 Apache 2.2 啟動用的 shell script 問題.
我不知道 2.1 有沒有這問題, 因為我用的是 2.2 , 下面也是以 2.2 做說明.
之前官方並沒有提供 apache22_http_accept_enable 這個參數讓我們丟進 /etc/rc.conf , 所以唯一解法是在 /boot/loader.conf 加進這行 :
accf_http_load="YES"
現在 /usr/local/etc/rc.d/apache22.sh 裡面可以看到這段 :
# apache22_http_accept_enable (bool): Set to "NO" by default.
# Set to yes to check for accf_http kernel
# module on start up and load if not loaded.
跟這段 :
if checkyesno apache22_http_accept_enable
then
if ! /sbin/kldstat -q -m accf_http
then
/sbin/kldload accf_http
fi
else
apache22_flags="-DNOHTTPACCEPT $apache22_flags"
fi
很明顯的, 這邊用到 kldstat 的 -q 跟 -m 這兩個選項.
但是 kldstat 在 FreeBSD 6 裡面才有支援 -q , 而 -m 則是在 5.4 STABLE 才有支援 , 5.4 RELEASE 以下都沒有.
- kldstat online manpage - FreeBSD 6.0
- kldstat online manpage - FreeBSD 5.4 STABLE
- kldstat online manpage - FreeBSD 5.4 RELEASE
所以在 5.4 RELEASE (含) 以下的平台在啟動時會看到這種訊息 :
kldstat: illegal option -- q
usage: kldstat [-v] [-i id] [-n name]
所以我送 pr 去請他們把 -q -m 改成 -n 就好.
目前看來是還沒處理, 不知道會不會回我信, 叫我改用 FreeBSD 6.0 ?
Technorati Tags: Apache, FreeBSD, shell script
Tags:
Apache ,
FreeBSD ,
shell script
(Visited 5005 times)
Nov 28
我只能說, 這個版本是顆大地雷.
除非系統是自己開發, 而且程式碼都寫得很漂亮, 不然用 4.4.0 還是比較好.
之前幫某台機器升級, 結果上面的 phpBB 就爛了... orz
Error message 長這個樣子:
PHP Fatal error: Cannot redeclare get_userdata() in xxx.php on line xxx
後來是靠 portdowngrade ( 在 /usr/ports/sysutils/portdowngrade ) 把版本換回 4.4.0 , 指令上大致上是這樣 :
cd /usr/ports/sysutils/portdowngrade
make install clean
rehash
portdowngrade -o -s \\
:pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs lang/php4
然後會出現一些問題給你選, 弄好以後用 portupgrade -f 把已安裝的這兩種開頭的軟體全部洗一遍就好:
- php4-*
- pecl-*
Technorati Tags: FreeBSD, PHP, portdowngrade
Tags:
FreeBSD ,
PHP ,
portdowngrade
(Visited 5045 times)
Nov 27
因為前幾天幫人家弄這個東西, 所以順便記錄一下.
Windows 2000 / 2003 的 PAE 不難搞定, 可以參考 這裡.
要注意的是, 如果主機板不支援的話, 多丟 /PAE 進去可能會爛掉.
FreeBSD 的 PAE 則是要參考 /sys/i386/conf/PAE 這個檔案.
我覺得這邊頗難搞, 主要是因為只要我用 PAE kernel , 開機時 twa0 ( 3ware 9500S-4LP ) 就會爛掉 .... orz
又因為我把系統裝在 RAID 5 上面, 所以開不了機, 而且就算是用原本的 kernel 開, 也找不到之前開機失敗的 boot message 了. 
在 5.4 上面, 死掉的原因是 driver 與 firmware 版本不符.
在 6.0 上面則是跑出一堆 error , 然後一直 reset controller .
因為那台機器用的是 Athlon64 , 所以我覺得..
直接丟 AMD64 版本的 FreeBSD 給機器吃可能會比較好吧? 
再找時間過去玩看看...
Technorati Tags: FreeBSD, PAE, Windows
Tags:
FreeBSD ,
PAE ,
Windows
(Visited 4277 times)
Jun 30
剛剛看到的, 總部打出 連 三 發 security advisories.
第一跟第三個真的是不作不行.
不過步驟蠻簡單的, update /usr/src 之後重新作 kernel .
第二個則是, update /usr/src 以後用這些指令 :
% cd /usr/src/lib/libbz2
% make obj && make depend && make && make install
% cd /usr/src/usr.bin/bzip2
% make obj && make depend && make && make install
( 啥? make world ? 不用那麼悲苦啦...
)
Technorati Tags: FreeBSD
Tags:
FreeBSD
(Visited 2764 times)
Jun 26
剛剛有學弟跟我說, 他在 FreeBSD 上面的 perl 升級從 5.8.6 升到 5.8.7 之後爛掉一堆東西.
因為這陣子我在忙考試, 所以我的機器也還沒升.
之前我從 5.8.5 升到 5.8.6 時, 必須很悲苦的自己檢查相依的軟體, 然後用 portupgrade 重裝.
剛剛在自己的機器上面測升級, 發現升級 5.8.7 的步驟簡單很多, 只要在升級完之後跑這兩串指令就能幫你修好 :
# perl-after-upgrade
# perl-after-upgrade -f
此舉真是造福了不少 host master 啊!!!
Technorati Tags: FreeBSD, Perl
Tags:
FreeBSD ,
Perl
(Visited 3451 times)
Recent Comments