ラベル CentOS5 の投稿を表示しています。 すべての投稿を表示
ラベル CentOS5 の投稿を表示しています。 すべての投稿を表示

2012/05/04

Postgres SQL めもめも

テーブル件数・容量

select relname, to_char(reltuples, '999999999') as rows, to_char(pg_relation_size(relname::regclass), '999999999999') as bytes from pg_class where relkind='r' and relnamespace = (select oid from pg_namespace where nspname='public') order by relname;

インデックス件数・容量

select relname, to_char(reltuples, '999999999') as rows, to_char(pg_relation_size(relname::regclass), '999999999999') as bytes from pg_class where relkind='i' and relnamespace = (select oid from pg_namespace where nspname='public') order by relname;

キャッシュヒット率(データベース)

select datname,round(blks_hit*100/(blks_hit+blks_read), 2) as cache_hit_ratio from pg_stat_database where blks_read > 0;

キャッシュヒット率(テーブル)

select relname,round(heap_blks_hit*100/(heap_blks_hit+heap_blks_read), 2) as cache_hit_ratio from pg_statio_user_tables where heap_blks_read > 0;

インデックスキャッシュヒット率

select relname, indexrelname, round(idx_blks_hit*100/(idx_blks_hit+idx_blks_read), 2) as cache_hit_ratio from pg_statio_user_indexes where idx_blks_read > 0;

表スキャンあたりの読み取り行数の確認

select relname, seq_scan, seq_tup_read, seq_tup_read/seq_scan as tup_per_read  from pg_stat_user_tables where seq_scan > 0;

ガベージの量の確認

select relname, n_live_tup, n_dead_tup, round(n_dead_tup*100/(n_dead_tup+n_live_tup), 2)  as dead_ratio, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where n_live_tup > 0;

HOT更新の比率の確認

select relname, n_tup_upd, n_tup_hot_upd, round(n_tup_hot_upd*100/n_tup_upd, 2) as hot_upd_ratio from pg_stat_user_tables where n_tup_upd > 0;

トングトランザクションの処理と経過時間の確認

select procpid, waiting, (current_timestamp - xact_start)::interval(3) as duration, current_query from pg_stat_activity where procpid <> pg_backend_pid();

ロック待ちとなっている処理内容と対象のテーブルを確認

select l.locktype, c.relname, l.pid, l.mode, substring(a.current_query, 1, 6) as query, (current_timestamp - xact_start)::interval(3) as duration from pg_locks l left outer join pg_stat_activity a on l.pid = a. procpid left outer join pg_class c on l.relation = c.oid where not l.granted order by l.pid;

参照

Let's Postgres 稼動統計情報を活用しよう(2)

2012/04/30

Postgres ディスク 負荷分散 テーブルスペース tablespace

ディスクの負荷分散!?

Postgresインストール先・データは/usr/local/pgsql/(/dev/sda)としてHDD2個追加してDBを作ってみる

テーブルスペース用のディスクをフォーマット&マウント

# mke2fs -j /dev/sdb1
# e2label /dev/sdb1 /pgsql1
# mkdir /pgsql1
# mount /dev/sdb1 /pgsql1
 
# mke2fs -j /dev/sdc1
# e2label /dev/sdc1 /pgsql2
# mkdir /pgsql2
# mount /dev/sdc1 /pgsql2
 
# vi /etc/fstab
LABEL=/pgsql1 /pgsql1 ext3 defaults,noatime 1 2
LABEL=/pgsql2 /pgsql2 ext3 defaults,noatime 1 2

テーブルスペース作成

# mkdir /pgsql1/pgdata1
# chown postgres:postgres /pgsql1
# chown postgres:postgres /pgsql1/pgdata1
 
# mkdir /pgsql2/pgdata2
# chown postgres:postgres /pgsql2
# chown postgres:postgres /pgsql2/pgdata2
 
# su - postgres
$ psql -c "\db+" template1 又は↓
$ psql -c "SELECT spcname FROM pg_tablespace;" template1
 
                        List of tablespaces
    Name    |  Owner   | Location | Access privileges | Description 
------------+----------+----------+-------------------+-------------
 pg_default | postgres |          |                   | 
 pg_global  | postgres |          |                   | 
(2 rows)
 
$ psql -c "create tablespace ts_pgdata1 location '/pgsql1/pgdata1';" template1
CREATE TABLESPACE
 
$ psql -c "create tablespace ts_pgdata2 location '/pgsql2/pgdata2';" template1
CREATE TABLESPACE
 
$ psql -c "\db+" template1
 
                            List of tablespaces
    Name    |  Owner   |    Location     | Access privileges | Description 
------------+----------+-----------------+-------------------+-------------
 pg_default | postgres |                 |                   | 
 pg_global  | postgres |                 |                   | 
 ts_pgdata1 | postgres | /pgsql1/pgdata1 |                   | 
 ts_pgdata2 | postgres | /pgsql2/pgdata2 |                   | 
(4 rows)

出来上がった環境

Postgresインストール先 /dev/sda上の/usr/local/pgsql

Postgresデータ /dev/sda上の/usr/local/pgsql/data

テーブルスペース1 /dev/sdb上の/pgsql1/pgdata1

テーブルスペース2 /dev/sdc上の/pgsql2/pgdata2

DB作成

日々更新・参照されるdb(db1+db2+db3...)はts_pgdata1へ

日々更新されるdb1,db2,db3.....とdbのINDEXはts_pgdata2へ

ということをしてみようかと。

# su - postgres
$ createdb db -D ts_pgdata1
$ psql -c "create table table1 ....." db
$ psql -c "create index index1 ..... tablespace ts_pgdata2" db
 
$ createdb db1 -D ts_pgdata2
$ psql -c "create table table1 ....." db1
$ psql -c "create index index1 ....." db1
 
$ createdb db2 -D ts_pgdata2
$ psql -c "create table table1 ....." db2
$ psql -c "create index index1 ....." db2
 
$ createdb db3 -D ts_pgdata2
$ psql -c "create table table1 ....." db3
$ psql -c "create index index1 ....." db3

確認。。。。。

?。。。テーブルとインデックス作成時にテーブルスペースを指定しなかったので現状を確認したいけれど、方法が分からなかったのでpg_adminでプロパティを見てみると意図したとおりに作成されていた。プロパティを持ってるってことはSQLでも確認できそうなので今度Postgresのシステムテーブルを漁ってみることに。。。

PostgresドキュメントのCREATE INDEX欄も見てみると載っていた。。。

>CREATE [ UNIQUE ] INDEX name ON table [ USING method ]

> ( { column | ( expression ) } [ opclass ] [, ...] )

> [ TABLESPACE tablespace ]

> [ WHERE predicate ]

>tablespace

>インデックスを生成するテーブル空間です。 指定されなかった場合、default_tablespaceが使用されます。 もし、default_tablespaceが空文字列であった場合はデータベースのデフォルトのテーブル空間が使用されます。

おまけ

DBダンプを取って見てみると違う環境でDBダンプから再構築したとしてもCREATE文ではエラーが出ないようになっていた。

ただ同じ名前のテーブルスペースがあったとしたら意図しないテーブルスペースを使用する可能性があるので余計な事を考えたくなければ、テーブルスペース名にサーバの名称など一意なものを加えると管理しやすいかも。

SET default_tablespace = '';
...
CREATE TABLE table1 ...;
...
...
SET default_tablespace = ts_pgdata2;
...
CREATE INDEX index1 ...;

2012/04/29

シェルスクリプト オプション 解析

シェルスクリプトを使いやすく。

シェルのコマンドラインからパラメータを受け取るものとして単純な$1 $2 ...のように$関係のものがあるが、ここではオプションを解析するスクリプトのメモ。

下記のようにしてみたい場合

$ command.sh -c -C -f filename.txt

command.sh

SCNAME=$(basename $0)
while getopts cf:C OPT
do
  case $OPT in
    "C" ) OPTA="TRUE";;
    "c" ) OPTB="TRUE";;
    "f" ) OPTC="TRUE"; OPTC_VALUE="$OPTARG" ;;
      * ) echo "Usage: $SCNAME [-c] [-C] [-f file]"; exit 1 ;;
  esac
done

getoptsの書式は、オプション文字列と、値もある場合はコロン(:)も付けないといけない。

2012/04/09

[ HDDの追加 - CentOS ]

ext3でフォーマット

# mke2fs -j /dev/sdbx

ラベル割り当て

# e2label /dev/sdbx /work

ファイルシステムのチェック

# e2fsck /dev/sdbx

マウントポイント作成

# mkdir /work

fstabに追記する

# vi /etc/fstab
LABEL=/work /work ext3 defaults,noatime 1 2

2012/04/05

tmpfsのグラフ作成 - CentOS グラフ Graph 作成 RRDTool tmpfs /dev/shm

グラフを作成してみた。

16Gのメモリをつんだサーバーを扱うようになったのでtmpfsも少し利用しようかと思って、どのぐらい使用するのかの確認を含めてグラフ化。

RRDTool Install



出来上がったもの

他のグラフにサイズをあわせて作ってしまったので、表示方法はいまいちだと思います。。。(・ω・;

tmpfs - /dev/shm

rrd作成:初めの一回のみ実行

#!/bin/sh
MEMTOTAL=$(cat /proc/meminfo|awk '{if($1=="MemTotal:") print $2}')
rrdtool create shm.rrd --step 60 \
  DS:ramtotal:GAUGE:600:0:${MEMTOTAL} \
  DS:ramused:GAUGE:600:0:${MEMTOTAL} \
      RRA:LAST:0.5:1:1440 \
      RRA:LAST:0.5:60:720 \
      RRA:LAST:0.5:360:1460 \
      RRA:AVERAGE:0.5:1:1440 \
      RRA:AVERAGE:0.5:60:720 \
      RRA:AVERAGE:0.5:360:1460 \
      RRA:MIN:0.5:1:1440 \
      RRA:MIN:0.5:60:720 \
      RRA:MIN:0.5:360:1460 \
      RRA:MAX:0.5:1:1440 \
      RRA:MAX:0.5:60:720 \
      RRA:MAX:0.5:360:1460

rrd更新:1分間隔~5分間隔程度。更新間隔が長いとグラフを作ったときにいまいちな結果になる(・ω・;

#!/bin/sh
CMAX=$(df|awk '{if($6=="/dev/shm") print $2}')
CUSED=$(df|awk '{if($6=="/dev/shm") print $3}')
rrdtool update shm.rrd N:${CMAX}:${CUSED}

グラフ作成:画像更新。適度に。

#!/bin/sh
DEV="shm"
TYPE=day
WIDTH=180
HEIGHT=90
DT=$(date -d '-1 day' '+%Y-%m-%d %H:%M:00')
SEC=$(date --date "${DT}" +%s)
RRD=${DEV}.rrd
FLNAME=${DEV}_${TYPE}.png
DTY=$(date '+%Y-%m-%d')
DTH=$(date '+%H')
DTM=$(date '+%M')
 
/usr/bin/rrdtool graph \
  ${ROOTDIR}/${FLNAME} \
  --start ${SEC} \
  --imgformat PNG \
  --interlaced \
  --width ${WIDTH} \
  --height ${HEIGHT} \
  --x-grid HOUR:1:HOUR:12:HOUR:3:0:%H \
  --y-grid none \
  --alt-autoscale-max \
  --lower-limit 0 \
  --base 1024 \
  DEF:v_used=${RRD}:ramused:AVERAGE \
  DEF:m_used=${RRD}:ramused:MAX \
  DEF:l_max=${RRD}:ramtotal:LAST \
  DEF:l_used=${RRD}:ramused:LAST \
  CDEF:cm_max=m_used,1000,* \
  CDEF:cl_max=l_max,1000,* \
  CDEF:cl_free=l_max,l_used,-,1000,* \
  CDEF:cl_used=l_used,1000,* \
  CDEF:g_used=l_used,l_max,/,100,* \
  CDEF:g_free=l_max,l_used,-,l_max,/,100,* \
  COMMENT:"/dev/shm\\n" \
  COMMENT:"(tmpfs)\\n" \
  AREA:g_used#ff7f50:"used\\g" \
  GPRINT:cl_used:LAST:"\\:%3.0lf%s" \
  GPRINT:cm_max:MAX:"max\\:%3.0lf%s\\n" \
  STACK:g_free#00ff00:"free\\g" \
  GPRINT:cl_free:LAST:"\\:%3.0lf%s\\n" \
  COMMENT:"date ${DTY} ${DTH}\\:${DTM}"

2012/02/19

[opencore-amr install]

http://sourceforge.net/projects/opencore-amr/
# tar zxf opencore-amr-0.1.2.tar.gz
# cd opencore-amr-0.1.2
# ./configure
# make
# make install

[NASM]

http://www.nasm.us/pub/nasm/releasebuilds/
# tar jxf nasm-2.09.05.tar.bz2
# cd nasm-2.09.05
# ./configure
# make
# make install

2011/09/08

[NTFS Format]

-->Repository

# yum --enablerepo=dag install ntfsprogs fuse-ntfs-3g

・fdiskで領域のシステムIDを7に変更しておく
# mkntfs /dev/sdb1
# mount -t ntfs /dev/sdb1 /mnt/ntfs

2011/09/01

【motion install】

-->Repository

# yum -y --enablerepo=dag motion
# vi /etc/motion/motion.conf
・
・
# /etc/init.d/motion start
・
・

起動していないなともったらログにエラーが出てる...
kernel: usb 1-3: new high speed USB device using ehci_hcd and address 3
kernel: usb 1-3: configuration #1 chosen from 1 choice
kernel: uvcvideo: Found UVC 1.00 device (046d:0821)
kernel: input: UVC Camera (046d:0821) as /class/input/input4
motion: [0] Processing thread 0 - config file /etc/motion/motion.conf
motion: [0] Created process id file /var/run/motion.pid. Process ID is 5801
motion: [0] Motion running as daemon process
motion: [0] Thread 1 is from /etc/motion/motion.conf
motion: [1] ioctl(VIDIOCGMBUF) - Error device does not support memory map
motion: [1] V4L capturing using read is deprecated!
motion: [1] Motion only supports mmap.
motion: [1] Capture error calling vid_start
motion: [1] Removed process id file (pid file).

2011/08/31

【UVC Install】


参考URL:http://www.ideasonboard.org/uvc/

# git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git uvcvideo
# cd uvcvideo
# git remote add uvcvideo git://linuxtv.org/pinchartl/uvcvideo.git
# git remote update
# git checkout -b uvcvideo-master uvcvideo/uvcvideo-next

# modprobe uvcvideo
# lsmod | grep uvcvideo
uvcvideo 53833 0
compat_ioctl32 5569 1 uvcvideo
videodev 25793 1 uvcvideo
v4l1_compat 16069 2 uvcvideo,videodev
v4l2_common 24385 2 uvcvideo,videodev

【git install】


-->Repository

# yum -y --enablerepo=dag install git
 ・
 ・
Downloading Packages:
(1/3): perl-Git-1.7.6-1.el5.rf.i386.rpm
(2/3): perl-DBI-1.52-2.el5.i386.rpm
(3/3): git-1.7.6-1.el5.rf.i386.rpm
 ・
 ・

#

2011/04/12

【unzipのsjis対応】

windowsで圧縮したファイル名・フォルダ名などはsjisになっていて
文字化け多発(・・;

色々調べた結果convmvを使用して解凍後変換という手もあるが
やはり文字化け多発・・・

unzipにパッチを与えるのがよさげでした。
参考HP:http://d.hatena.ne.jp/t2y-1979/20090628/1246157403

・準備
1.unzipのPRMソースを拾ってくる
unzip-5.52-3.el5.src.rpm

2.unzip-jaパッチを拾ってくる
wget 'http://ebuild.gentoo.gr.jp/open.php?mode=download&type=files&cat=app-arch&app=unzip&arg=unzip-5.52-ubuntuja.patch&visible=' -O unzip-5.52-sjis.patch

# rpm -ivh unzip-5.52-3.el5.src.rpm
# cp -p unzip-5.52-sjis.patch /usr/src/redhat/SOURCES/
# cd /usr/src/redhat/SPECS/
# cp -p unzip.spec unzip.spec.orig
# vi unzip.spec
Release: 3%{?dist}
↓
Release: 3%{?dist}.1ja

追記
Patch12: unzip-5.52-sjis.patch

追記
%patch12 -p1 -b .sjis

# rpmbuild -ba unzip.spec
# rpm -Uvh ../RPMS/i386/unzip-5.52-3.1ja.i386.rpm
# rpm -q unzip
unzip-5.52-3.1ja

2011/03/30

【ゲストOSの時刻の進みが速すぎる場合の対処】

vi /etc/vmware/config
host.cpukHz = 30000000 <-- CPU 3000MHzの場合
host.noTSC = TRUE
ptsc.noTSC = TRUE

環境にもよるとおもうが、
全ての速度がすごく早くなってたゲームがあったので
Flashゲームなど高速化できるということに。

2011/03/14

【シグナルを受け取るシェルスクリプト】

$ 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

$ vi test.sh
#!/bin/sh
trap "echo SIGNAL QUIT; SIG=QUIT;" 3
while :;
do
    if [ "x${SIG}" != "x" ]; then
        exit 3;
    fi
    sleep 1
done

$ sh test.sh &
$ ps ax|grep test.sh
 8888 pts/0    S+     0:00 sh test.sh
$ kill -QUIT 8888

2011/03/04

【エラーの出ているブロックを使用しないようにする】

エラー箇所の出力
# badblocks -vs -o hda1.bad.txt /dev/hda1

使用しないように反映
# fsck -l hda1.bad.txt /dev/hda1

2011/02/24

[ffmpeg-php install]

# http://ffmpeg-php.sourceforge.net/
# tar jxf ffmpeg-php-0.6.0.tbz2
# cd ffmpeg-php-0.6.0
# vi ffmpeg_frame.c
PIX_FMT_RGBA32 --> PIX_FMT_RGB32
# phpize
# ./configure
# make
# make install
...
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/
...


# vi /usr/local/lib/php.ini
extension_dir="/usr/local/lib/php/extensions/no-debug-non-zts-20060613"
extension=ffmpeg.so

or

# cp /usr/local/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so /usr/local/lib/

[ffmpeg install]

# tar zxf ffmpeg-0.6.1.tar.gz
# cd ffmpeg-0.6.1
# export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

# ./configure --enable-shared --enable-gpl --enable-nonfree --enable-libx264 --enable-libmp3lame --enable-libfaac --enable-libfaad
# make
# make install

# vi /etc/ld.so.conf.d/ffmpeg-lib-path.conf
/usr/local/lib

# ldconfig

[h264 install]

http://www.videolan.org/developers/x264.html
# tar jxf last_x264.tar.bz2
# cd x264-snapshot-20110222-2245
# ./configure --enable-shared
# make
# make install

[gpac install]

http://gpac.wp.institut-telecom.fr/
tar zxf gpac-gpac.tar.gz
cd gpac
# ./configure
# make
# make install