隨筆 - 175  文章 - 202  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          第一個Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          1. cross join 就是笛卡爾積
          那看起來好象和 inner join 是一樣的,在 SQL 標(biāo)準(zhǔn)中定義的是 cross join 就是沒有條件的 inner join。在 mysql 中,不區(qū)分,這兩個等價。

          2. natural (left) join 是把兩個表名字一樣的列,做相等條件處理,比如:

          t1
          id1 name

          t2
          id2 name

          那么 select t1.id1, t2.id1, t1.name from t1 natural join t2 就等價

          select t1.id1, t2.id1, t1.name from t1 join t2 on (t1.name = t2.name)

          自動把一樣名稱的列(name)做了個相待條件處理,多列也會同時處理。

          所以,這兩種 join 沒人用是有原因的。

          cross join 沒意義,一般用逗號就可以了。

          natural 降低了可讀性,不建議使用。
          posted @ 2011-10-13 18:06 哈哈的日子 閱讀(629) | 評論 (0)編輯 收藏
                          一個好軟件,會讓人覺得賞心悅目
                           會讓人心曠神怡
                           會開心
                           會……

          H2DB 就是這樣的一個好軟件,就一個感覺----舒服!


          比如:group by sort 的實現(xiàn)


              private void queryGroupSorted(int columnCount, ResultTarget result) {

                  int rowNumber = 0;

                  setCurrentRowNumber(0);

                  Value[] previousKeyValues = null;

                  while (topTableFilter.next()) {

                      setCurrentRowNumber(rowNumber + 1);

                      if (condition == null || Boolean.TRUE.equals(condition.getBooleanValue(session))) {

                          rowNumber++;

                          Value[] keyValues = new Value[groupIndex.length];

                          // update group

                          for (int i = 0; i < groupIndex.length; i++) {

                              int idx = groupIndex[i];

                              Expression expr = expressions.get(idx);

                              keyValues[i] = expr.getValue(session);

                          }


                          if (previousKeyValues == null) {

                              previousKeyValues = keyValues;

                              currentGroup = New.hashMap();

                          } else if (!Arrays.equals(previousKeyValues, keyValues)) {

                              addGroupSortedRow(previousKeyValues, columnCount, result);

                              previousKeyValues = keyValues;

                              currentGroup = New.hashMap();

                          }

                          currentGroupRowId++;


                          for (int i = 0; i < columnCount; i++) {

                              if (groupByExpression == null || !groupByExpression[i]) {

                                  Expression expr = expressions.get(i);

                                  expr.updateAggregate(session);

                              }

                          }

                      }

                  }

                  if (previousKeyValues != null) {

                      addGroupSortedRow(previousKeyValues, columnCount, result);

                  }

              }



          看著太舒服了。

          posted @ 2011-10-12 13:52 哈哈的日子 閱讀(261) | 評論 (0)編輯 收藏
          http://ivansmirnov.wordpress.com/2011/03/19/java-util-concurrent-locks-thread-dump/

          The Sun JVM setting “-XX:+PrintConcurrentLocks” adds the lock owner information to the thread dump.
          posted @ 2011-08-16 16:18 哈哈的日子 閱讀(193) | 評論 (0)編輯 收藏
          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

          http://en.wikipedia.org/wiki/Category:Unix_signals

          1.SIGHUP信號

          UNIX中進(jìn)程組織結(jié)構(gòu)為 session (會話)包含一個前臺進(jìn)程組及一個或多個后臺進(jìn)程組,一個進(jìn)程組包含多個進(jìn)程。一個session可能會有一個session首進(jìn)程,而一個session首進(jìn)程可能會有一個控制終端。一個進(jìn)程組可能會有一個進(jìn)程組首進(jìn)程。進(jìn)程組首進(jìn)程的進(jìn)程ID與該進(jìn)程組ID相等。這兒是可能會有,在一定情況之下是沒有的。與終端交互的進(jìn)程是前臺進(jìn)程,否則便是后臺進(jìn)程。
          SIGHUP會在以下3種情況下被發(fā)送給相應(yīng)的進(jìn)程:
          1、終端關(guān)閉時,該信號被發(fā)送到session首進(jìn)程以及作為job提交的進(jìn)程(即用 & 符號提交的進(jìn)程)
          2、session首進(jìn)程退出時,該信號被發(fā)送到該session中的前臺進(jìn)程組中的每一個進(jìn)程
          3、若父進(jìn)程退出導(dǎo)致進(jìn)程組成為孤兒進(jìn)程組,且該進(jìn)程組中有進(jìn)程處于停止?fàn)顟B(tài)(收到SIGSTOP或SIGTSTP信號),該信號會被發(fā)送到該進(jìn)程組中的每一個進(jìn)程。
          統(tǒng)對SIGHUP信號的默認(rèn)處理是止收到信號的進(jìn)程。所以若程序中沒有捕捉信號,當(dāng)收到信號進(jìn)程就會退出。
          下面觀察幾種因終端關(guān)閉導(dǎo)致進(jìn)程退出的情況,在這兒進(jìn)程退出是因為收到了SIGHUP信號。login shell是session首進(jìn)程。
          首先寫一個測試程序,代碼如下:
          #include <stdio.h>
          #include 
          <signal.h>
          char **args;
          void exithandle(int
           sig)
          {
                  printf(
          "%s : sighup received ",args[1
          ]);
          }

          int main(int argc,char **argv)
          {
                  args 
          =
           argv;
                  signal(SIGHUP,exithandle);
                  pause();
                 
          return 0
          ;
          }
          程序中捕捉SIGHUP信號后打印一條信息,pause()使程序暫停。
          編譯后的執(zhí)行文件為sigtest。
          1、命 令:sigtest front > tt.txt
             操 作:關(guān)閉終端
             結(jié) 果:tt.txt文件的內(nèi)容為front : sighup received
             原 因: sigtest是前臺進(jìn)程,終端關(guān)閉后,根據(jù)上面提到的第1種情況,login shell作為session首進(jìn)程,會收到SIGHUP信號然后退出。根據(jù)第2種情況,sigtest作為前臺進(jìn)程,會收到login shell發(fā)出的SIGHUP信號。
          2、命 令:sigtest back > tt.txt &
               操 作:關(guān)閉終端
                結(jié) 果:tt.txt文件的內(nèi)容為 back : sighup received
                原 因: sigtest是提交的job,根據(jù)上面提到的第1種情況,sigtest會收到SIGHUP信號。
          3、命 令:寫一個shell,內(nèi)容為[sigtest &],然后執(zhí)行該shell
                操 作:關(guān)閉終端
                結(jié) 果:ps -ef | grep sigtest 會看到該進(jìn)程還在,tt文件為空
                原 因: 執(zhí)行該shell時,sigtest作為job提交,然后該shell退出,致使sigtest變成了孤兒進(jìn)程,不再是當(dāng)前session的job了,因此sigtest即不是session首進(jìn)程也不是job,不會收到SIGHUP。同時孤兒進(jìn)程屬于后臺進(jìn)程,因此login shell退出后不會發(fā)送SIGHUP給sigtest,因為它只將該信號發(fā)送給前臺進(jìn)程。第3條說過若進(jìn)程組變成孤兒進(jìn)程組的時候,若有進(jìn)程處于停止?fàn)顟B(tài),也會收到SIGHUP信號,但sigtest沒有處于停止?fàn)顟B(tài),所以不會收到SIGHUP信號。
          4、命 令:nohup sigtest > tt
                操 作:關(guān)閉終端
                結(jié) 果:tt文件為空
                原 因: nohup可以防止進(jìn)程收到SIGHUP信號
          至此,我們就清楚了何種情況下終端關(guān)閉后進(jìn)程會退出,何種情況下不會退出。


          要想終端關(guān)閉后進(jìn)程不退出有以下幾種方法,均為通過shell的方式:
          1、編寫shell,內(nèi)容如下
                 trap "" SIGHUP #該句的作用是屏蔽SIGHUP信號,trap可以屏蔽很多信號
                sigtest
          2、nohup sigtest 可以直接在命令行執(zhí)行,
                 若想做完該操作后繼續(xù)別的操作,可以 nohup sigtest &
          3、編寫shell,內(nèi)容如下
                 sigtest &
                 其實任何將進(jìn)程變?yōu)楣聝哼M(jìn)程的方式都可以,包括fork后父進(jìn)程馬上退出。

          2.SIGCHLD信號

                 子進(jìn)程死后,會發(fā)送SIGCHLD信號給父進(jìn)程。

                  一個進(jìn)程在調(diào)用exit命令結(jié)束自己的生命的時候,其實它并沒有真正的被銷毀,而是留下一個稱為僵尸進(jìn)程(Zombie)的數(shù)據(jù)結(jié)構(gòu)(系統(tǒng)調(diào)用exit,它的作用是使進(jìn)程退出,但也僅僅限于將一個正常的進(jìn)程變成一個僵尸進(jìn)程,并不能將其完全銷毀)。在Linux進(jìn)程的狀態(tài)中,僵尸進(jìn)程 是非常特殊的一種,它已經(jīng)放棄了幾乎所有內(nèi)存空間,沒有任何可執(zhí)行代碼,也不能被調(diào)度,僅僅在進(jìn)程列表中保留一個位置,記載該進(jìn)程的退出狀態(tài)等信息供其他進(jìn)程收集,除此之外,僵尸進(jìn)程不再占有任何內(nèi)存空間。它需要它的父進(jìn)程來為它收尸,如果他的父進(jìn)程沒安裝SIGCHLD信號處理函數(shù)調(diào)用wait或waitpid()等待子進(jìn)程結(jié)束,又沒有顯式忽略該信號,那么它就一直保持僵尸狀態(tài),如果這時父進(jìn)程結(jié)束了,那么init進(jìn)程自動會接手這個子進(jìn)程,為它收尸,它還是能被清除的。但是如果如果父進(jìn)程是一個循環(huán),不會結(jié)束,那么子進(jìn)程就會一直保持僵尸狀態(tài),這就是為什么系統(tǒng)中有時會有很多的僵尸進(jìn)程。

          2.SIGTERM信號

          kill() 可以發(fā) SIGTERM 過去;kill 命令默認(rèn)也使用 SIGTERM 信號。

          SIGTERM 信號的處理函數(shù),常見的是用來清理、退出;或者程序可以忽略這個信號,以防誤殺。
                  SIGTERM is the default signal sent to a process by the kill or killall commands. It causes the termination of a process, but unlike the SIGKILLsignal, it can be caught and interpreted (or ignored) by the process. Therefore, SIGTERM is more akin to asking a process to terminate nicely, allowing cleanup and closure of files. For this reason, on many Unix systems during shutdown, init issues SIGTERM to all processes that are not essential to powering off, waits a few seconds, and then issues SIGKILL to forcibly terminate other processes to allow the computer to halt.




          linux kill信號列表
          2009-04-13 17:00
          $ kill -l
          1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
          5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
          9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
          13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD
          18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
          22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
          26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
          30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
          36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
          40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
          44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
          48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
          52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
          56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
          60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
          64) SIGRTMAX

          列表中,編號為1 ~ 31的信號為傳統(tǒng)UNIX支持的信號,是不可靠信號(非實時的),編號為32 ~ 63的信號是后來擴充的,稱做可靠信號(實時信號)。不可靠信號和可靠信號的區(qū)別在于前者不支持排隊,可能會造成信號丟失,而后者不會。

          下面我們對編號小于SIGRTMIN的信號進(jìn)行討論。

          1) SIGHUP
          本信號在用戶終端連接(正常或非正常)結(jié)束時發(fā)出, 通常是在終端的控制進(jìn)程結(jié)束時, 通知同一session內(nèi)的各個作業(yè), 這時它們與控制終端不再關(guān)聯(lián)。

          登錄Linux時,系統(tǒng)會分配給登錄用戶一個終端(Session)。在這個終端運行的所有程序,包括前臺進(jìn)程組和后臺進(jìn)程組,一般都屬于這個 Session。當(dāng)用戶退出Linux登錄時,前臺進(jìn)程組和后臺有對終端輸出的進(jìn)程將會收到SIGHUP信號。這個信號的默認(rèn)操作為終止進(jìn)程,因此前臺進(jìn) 程組和后臺有終端輸出的進(jìn)程就會中止。不過可以捕獲這個信號,比如wget能捕獲SIGHUP信號,并忽略它,這樣就算退出了Linux登錄,wget也 能繼續(xù)下載。

          此外,對于與終端脫離關(guān)系的守護進(jìn)程,這個信號用于通知它重新讀取配置文件。

          2) SIGINT
          程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發(fā)出,用于通知前臺進(jìn)程組終止進(jìn)程。

          3) SIGQUIT
          和SIGINT類似, 但由QUIT字符(通常是Ctrl-\)來控制. 進(jìn)程在因收到SIGQUIT退出時會產(chǎn)生core文件, 在這個意義上類似于一個程序錯誤信號。

          4) SIGILL
          執(zhí)行了非法指令. 通常是因為可執(zhí)行文件本身出現(xiàn)錯誤, 或者試圖執(zhí)行數(shù)據(jù)段. 堆棧溢出時也有可能產(chǎn)生這個信號。

          5) SIGTRAP
          由斷點指令或其它trap指令產(chǎn)生. 由debugger使用。

          6) SIGABRT
          調(diào)用abort函數(shù)生成的信號。

          7) SIGBUS
          非法地址, 包括內(nèi)存地址對齊(alignment)出錯。比如訪問一個四個字長的整數(shù), 但其地址不是4的倍數(shù)。它與SIGSEGV的區(qū)別在于后者是由于對合法存儲地址的非法訪問觸發(fā)的(如訪問不屬于自己存儲空間或只讀存儲空間)。

          8) SIGFPE
          在發(fā)生致命的算術(shù)運算錯誤時發(fā)出. 不僅包括浮點運算錯誤, 還包括溢出及除數(shù)為0等其它所有的算術(shù)的錯誤。

          9) SIGKILL
          用來立即結(jié)束程序的運行. 本信號不能被阻塞、處理和忽略。如果管理員發(fā)現(xiàn)某個進(jìn)程終止不了,可嘗試發(fā)送這個信號。

          10) SIGUSR1
          留給用戶使用

          11) SIGSEGV
          試圖訪問未分配給自己的內(nèi)存, 或試圖往沒有寫權(quán)限的內(nèi)存地址寫數(shù)據(jù).

          12) SIGUSR2
          留給用戶使用

          13) SIGPIPE
          管道破裂。這個信號通常在進(jìn)程間通信產(chǎn)生,比如采用FIFO(管道)通信的兩個進(jìn)程,讀管道沒打開或者意外終止就往管道寫,寫進(jìn)程會收到SIGPIPE信號。此外用Socket通信的兩個進(jìn)程,寫進(jìn)程在寫Socket的時候,讀進(jìn)程已經(jīng)終止。

          14) SIGALRM
          時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數(shù)使用該信號.

          15) SIGTERM
          程序結(jié)束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常退出,shell命令kill缺省產(chǎn)生這個信號。如果進(jìn)程終止不了,我們才會嘗試SIGKILL。

          17) SIGCHLD
          子進(jìn)程結(jié)束時, 父進(jìn)程會收到這個信號。

          如果父進(jìn)程沒有處理這個信號,也沒有等待(wait)子進(jìn)程,子進(jìn)程雖然終止,但是還會在內(nèi)核進(jìn)程表中占有表項,這時的子進(jìn)程稱為僵尸進(jìn)程。這種情 況我們應(yīng)該避免(父進(jìn)程或者忽略SIGCHILD信號,或者捕捉它,或者wait它派生的子進(jìn)程,或者父進(jìn)程先終止,這時子進(jìn)程的終止自動由init進(jìn)程來接管)。

          18) SIGCONT
          讓一個停止(stopped)的進(jìn)程繼續(xù)執(zhí)行. 本信號不能被阻塞. 可以用一個handler來讓程序在由stopped狀態(tài)變?yōu)槔^續(xù)執(zhí)行時完成特定的工作. 例如, 重新顯示提示符...

          19) SIGSTOP
          停止(stopped)進(jìn)程的執(zhí)行. 注意它和terminate以及interrupt的區(qū)別:該進(jìn)程還未結(jié)束, 只是暫停執(zhí)行. 本信號不能被阻塞, 處理或忽略.

          20) SIGTSTP
          停止進(jìn)程的運行, 但該信號可以被處理和忽略. 用戶鍵入SUSP字符時(通常是Ctrl-Z)發(fā)出這個信號

          21) SIGTTIN
          當(dāng)后臺作業(yè)要從用戶終端讀數(shù)據(jù)時, 該作業(yè)中的所有進(jìn)程會收到SIGTTIN信號. 缺省時這些進(jìn)程會停止執(zhí)行.

          22) SIGTTOU
          類似于SIGTTIN, 但在寫終端(或修改終端模式)時收到.

          23) SIGURG
          有"緊急"數(shù)據(jù)或out-of-band數(shù)據(jù)到達(dá)socket時產(chǎn)生.

          24) SIGXCPU
          超過CPU時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變。

          25) SIGXFSZ
          當(dāng)進(jìn)程企圖擴大文件以至于超過文件大小資源限制。

          26) SIGVTALRM
          虛擬時鐘信號. 類似于SIGALRM, 但是計算的是該進(jìn)程占用的CPU時間.

          27) SIGPROF
          類似于SIGALRM/SIGVTALRM, 但包括該進(jìn)程用的CPU時間以及系統(tǒng)調(diào)用的時間.

          28) SIGWINCH
          窗口大小改變時發(fā)出.

          29) SIGIO
          文件描述符準(zhǔn)備就緒, 可以開始進(jìn)行輸入/輸出操作.

          30) SIGPWR
          Power failure

          31) SIGSYS
          非法的系統(tǒng)調(diào)用。

          在以上列出的信號中,程序不可捕獲、阻塞或忽略的信號有:SIGKILL,SIGSTOP
          不能恢復(fù)至默認(rèn)動作的信號有:SIGILL,SIGTRAP
          默認(rèn)會導(dǎo)致進(jìn)程流產(chǎn)的信號有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
          默認(rèn)會導(dǎo)致進(jìn)程退出的信號有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
          默認(rèn)會導(dǎo)致進(jìn)程停止的信號有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
          默認(rèn)進(jìn)程忽略的信號有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH

          此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在進(jìn)程掛起時是繼續(xù),否則是忽略,不能被阻塞。

          posted @ 2011-08-16 11:55 哈哈的日子 閱讀(792) | 評論 (0)編輯 收藏
          會報錯
          sudo: sorry, you must have a tty to run sudo @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

          只要用 ssh -t 就可以了。

          或者修改 /etc/suoders
          將 requirestty 注釋掉
          posted @ 2011-08-15 12:05 哈哈的日子 閱讀(1475) | 評論 (0)編輯 收藏
          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
          1. 使用默認(rèn)隔離級別 repeatable read
          2. 開始,使用 select @@tx_isolation 確認(rèn)當(dāng)前 session 的隔離級別,并且創(chuàng)建個表 create table tt (id int, name varchar(300)) engine=innodb
          3. 啟動 transaction 1(t1),使用 start transaction
          4. 啟動 transaction 2(t2), 再開個 mysql,使用 start transaction
          5. 在 t2 執(zhí)行 select * from tt
          6. 在 t1 執(zhí)行 insert into tt  values(1, 'haha')
          7. 在 t2 再次執(zhí)行 select * from tt,是看不到數(shù)據(jù)的。
          8. 在 t2 執(zhí)行 update tt set name='hehe' where id=1
          9. 在 t2 再再次執(zhí)行 select * from tt,居然看到 id=1 那條 hehe 了!
          10. 我們幻讀了......

          參考自:
          http://blog.bitfly.cn/post/mysql-innodb-phantom-read/

          原作者寫得非常好


          posted @ 2011-08-02 17:59 哈哈的日子 閱讀(1470) | 評論 (4)編輯 收藏
               摘要: 轉(zhuǎn)自:http://blog.csdn.net/wang382758656/article/details/5771332 @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteed...  閱讀全文
          posted @ 2011-07-28 12:03 哈哈的日子 閱讀(1336) | 評論 (2)編輯 收藏
          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
          因為連接數(shù)的問題,我不得不在一臺機器上多啟 mysql instance

          1. 建立兩個 mysql 數(shù)據(jù)庫實例
          mysql_install_db --datadir=xxx
          2. 配置 /etc/my.cnf

          [client]
          #password = your_password
          #port = 3306
          #socket = /var/lib/mysql/mysql.sock

          # Here follows entries for some specific programs
          [mysqld_multi] 
          mysqld = /usr/bin/mysqld_safe 
          mysqladmin = /usr/bin/mysqladmin 
          user = mysql
          password = mysql

          [mysqld1]
          datadir = /home/intple/mysql/data1
          max_connections = 800

          long_query_time = 0.1
          #log-queries-not-using-indexes
          slow_query_log = 1
          slow_query_log_file = /var/log/mysql-slow.log

          port = 3306
          socket = /home/intple/mysql/data1/mysql.sock
          skip-locking
          key_buffer_size = 384M
          max_allowed_packet = 1M
          table_open_cache = 512
          sort_buffer_size = 2M
          read_buffer_size = 2M
          read_rnd_buffer_size = 8M
          myisam_sort_buffer_size = 64M
          thread_cache_size = 32
          query_cache_size = 512M
          # Try number of CPU's*2 for thread_concurrency
          thread_concurrency = 32

          log-bin=mysql-bin

          server-id = 1

          binlog_format=mixed

          innodb_buffer_pool_size = 20G
          innodb_additional_mem_pool_size = 32M
          innodb_thread_concurrency = 32
          # Set .._log_file_size to 25 % of buffer pool size
          innodb_log_file_size = 256M
          innodb_log_buffer_size = 32M
          innodb_flush_log_at_trx_commit = 1
          innodb_autoextend_increment = 64M
          innodb_lock_wait_timeout = 200

          [mysqld2]
          datadir = /home/intple/mysql/data2
          max_connections = 800

          long_query_time = 0.1
          #log-queries-not-using-indexes
          slow_query_log = 1
          slow_query_log_file = /var/log/mysql2-slow.log

          port = 3307
          socket = /home/intple/mysql/data2/mysql2.sock
          skip-locking
          key_buffer_size = 384M
          max_allowed_packet = 1M
          table_open_cache = 512
          sort_buffer_size = 2M
          read_buffer_size = 2M
          read_rnd_buffer_size = 8M
          myisam_sort_buffer_size = 64M
          thread_cache_size = 32
          query_cache_size = 512M
          # Try number of CPU's*2 for thread_concurrency
          thread_concurrency = 32

          log-bin=mysql-bin

          server-id = 1

          binlog_format=mixed

          innodb_buffer_pool_size = 20G
          innodb_additional_mem_pool_size = 32M
          innodb_thread_concurrency = 32
          # Set .._log_file_size to 25 % of buffer pool size
          innodb_log_file_size = 256M
          innodb_log_buffer_size = 32M
          innodb_flush_log_at_trx_commit = 1
          innodb_autoextend_increment = 64M
          innodb_lock_wait_timeout = 200

          [mysqldump]
          quick
          max_allowed_packet = 16M

          [mysql]
          no-auto-rehash
          # Remove the next comment character if you are not familiar with SQL
          #safe-updates

          [myisamchk]
          key_buffer_size = 256M
          sort_buffer_size = 256M
          read_buffer = 2M
          write_buffer = 2M

          [mysqlhotcopy]
          interactive-timeout

          3. 啟動
          mysqld_multi start 1 &
          mysqld_multi start 2 &
          posted @ 2011-07-12 15:59 哈哈的日子 閱讀(565) | 評論 (0)編輯 收藏
          應(yīng)該是因為 ipv6 的原因,我 lsof -i -P | grep xxx , xxx 是那個 udp multicast 的 ip,是可以看到這個端口被使用了的,但還是一直報錯。 Can't assign requested address
          后來查了一下,在啟動 java 參數(shù)上加上 -Djava.net.preferIPv4Stack=true 就解決了。
          posted @ 2011-07-01 10:23 哈哈的日子 閱讀(338) | 評論 (0)編輯 收藏

          轉(zhuǎn)自:http://xok.la/2010/01/mysqlslap_test.html

          mysqlslap是官方提供的壓力測試工具之一,官方介紹如下:

          mysqlslap is a diagnostic program designed to emulate client load for a MySQL server and to report
          the timing of each stage. It works as if multiple clients are accessing the server. mysqlslap is
          available as of MySQL 5.1.4.

          下面介紹一些常見參數(shù):

          --auto-generate-sql-write-number
          每個線程中產(chǎn)生多少個insert
          --auto-generate-sql-guid-primary
          自動產(chǎn)生guid格式的主鍵
          --number-of-queries=50000
          每個連接客戶端總共發(fā)起的查詢次數(shù)
          --concurrency=10,50,100
          并發(fā)連接線程數(shù),分別是10、50、100個并發(fā)
          -i, --iterations
          重復(fù)執(zhí)行測試的次數(shù)
          --number-char-cols=10
          創(chuàng)建測試表的 char 型字段數(shù)量
          --number-int-cols=10
          創(chuàng)建測試表的 int 型字段數(shù)量

          下面是一個完整的例子:

          mysqlslap -hlocalhost -uroot --engine=innodb --auto-generate-sql-write-number=100000 \
          --auto-generate-sql-guid-primary --concurrency=10,50,100 --number-of-queries=50000 \
          --iterations=2 --number-char-cols=10 --number-int-cols=10 --auto-generate-sql \
          --create-schema=sbtest --auto-generate-sql-load-type=mixed

          具體的慢慢看手冊吧,mysqlslap在mysql的目錄的bin目錄內(nèi)。   

          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
          posted @ 2011-06-28 16:58 哈哈的日子 閱讀(191) | 評論 (0)編輯 收藏
          僅列出標(biāo)題
          共17頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 南靖县| 浮梁县| 青冈县| 仙游县| 临颍县| 卢湾区| 同仁县| 班戈县| 昌乐县| 施甸县| 灵璧县| 平顺县| 蓬溪县| 宽甸| 任丘市| 凉城县| 乌拉特前旗| 天长市| 安庆市| 古丈县| 乌兰县| 年辖:市辖区| 台湾省| 奇台县| 维西| 青铜峡市| 崇信县| 平昌县| 诸暨市| 历史| 商水县| 陇西县| 庄浪县| 沈丘县| 洪洞县| 巢湖市| 贵州省| 宁乡县| 永顺县| 沾益县| 江达县|