[DBチューニングコンテスト とんがりナレッジ] Arch Linux で勝負してみた
9/25(金)に社内Oracleのチューニングコンテスト決勝戦が開催されました。
チューニングコンテストのルールは予算10万円でマシンを構築し、予選でTPC-Cのnumber of warehouses=1,sessio=20を規定時間以内に終了させれば決勝進出という内容で、決勝戦はTPC-Hのscale factor=10,session=4の実行終了までの時間を競いました。
細かなチューニングをせずに勝負に挑み2位という結果でした。
その要因の1つがマシンスペックの差によるものです。
これはCPU,メモリ,マザーボードをオーバークロック向きの構成でまとめたことが大きかったように思います。
そしてもう1つの要因となったのがOSでした。
OSを選択する上でこだわったのはシンプルであるということです。
いろいろ検討する中で見つけたのはがArch LinuxというLinuxのディストリビューションでした。
Arch Linuxは「シンプリシティ」、ミニマリズム、エレガンスさ、コードの正しさに焦点を当てて開発されている軽量なLinuxでARM向けのイメージ用意されており、Raspberry PiのOSとしても知られています。
ただし、シンプルさゆえにインストーラは存在せずLive CDを起動してもコンソールが立ち上がるのみといった非常に潔い構成となっています。
検証のため、OSとOracleをインストールした直後にTPC-Hのscale factor=10,session=4でCentOSと比較してみましたが1.17倍ほどArch Linuxの方が速いという結果となりました。
環境構築にあたりUEFIブート、Fake RAIDでディスクを構築しましたが情報がまとまっているサイトがなく苦労しましたのでOracleの導入までの手順を紹介したいと思います。
-
Arch Linux導入
- インストールメディアの準備次のいずれかからダウンロードしてください。
ローリングアップデートを採用しているためバージョンではなく日付でインストールメディアは管理されています。
http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso
http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/iso - キーボードレイアウト変更
インストール作業用にキーボードレイアウトを変更します。
英語キーボードで作業する場合は不要です。# loadkeys jp106
- ネットワーク接続の確立
ip aもしくはifconifg
ipが割り当てられていることを確認。
リポジトリからパッケージをダウンロードすることになりますので必ずネットワークは確立してください。
※インストール後にifconfigを使用したい場合はnet-toolsの導入が必要です。# ping -c 3 www.google.com
- sshの設定
この設定はLive CDから起動した状態でsshを使用したい場合の設定です。
インストール後のssh設定は別途必要になります。
以降の設定をコピー&ペーストで実行したい場合は設定してください。# systemctl start sshd # passwd "パスワード"
- パーティション作成
まずはRAIDの構成を確認します。# ls -l /dev/md/*
デュアルブートにするためにFakeRaidのRAID0で2つRAID0_VOL1,RAID0_VOL1のラベル名で用意しています。
今回はArch Linuxには/dev/md/RAID0_VOL1_0を使用します。それではパーティションを作成していきます。
最低限必要となるパーティションは3つあります。1. EFI System Partition
2. Swap Partition
3. root PartitionArch linuxを紹介しているサイトではfdisk,cgdiskなどを使用していますが今回はgdiskを使用します。
# cgdisk /dev/md/RAID0_VOL1_0
1. EFI System Partition
Command (? for help): n Partition number (1-128, default 1): First sector (34-500129758, default = 2048) or {+-}size{KMGTP}: Last sector (2048-500129758, default = 500129758) or {+-}size{KMGTP}: +512M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): EF00 Changed type of partition to 'EFI System'
2. Swap Partition
Command (? for help): n Partition number (2-128, default 2): First sector (34-500129758, default = 1050624) or {+-}size{KMGTP}: Last sector (1050624-500129758, default = 500129758) or {+-}size{KMGTP}: +16G Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8200 Changed type of partition to 'Linux swap'
3. root Partition
Command (? for help): n Partition number (3-128, default 3): First sector (34-500129758, default = 34605056) or {+-}size{KMGTP}: Last sector (34605056-500129758, default = 500129758) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'
最後に設定を書き込んで終了です。
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/md/RAID0_VOL1_0. The operation has completed successfully.
念のためgdiskで構成を確認します。
続いて作成されたパーティションを確認します。 - パーティションのフォーマット
1. EFI System Partition# mkfs.vfat -F32 /dev/md/RAID0_VOL1_0p1
2. Swap Partition
# mkswap /dev/md/RAID0_VOL1_0p2
3. root Partition
今回はext4でフォーマットします。
xfsなど好みのファイルシステムでフォーマットしてください。# mkfs.ext4 /dev/md/RAID0_VOL1_0p3
- パーティションのマウント
rootパーティションにEFI System Partitionをブートするため先ほどまでと逆順に進めます。
3. root Partition# mount /dev/md/RAID0_VOL1_0p3 /mnt
2. Swap Partition
# swapon /dev/md/RAID0_VOL1_0p2
1. EFI System Partition
# mkdir /mnt/boot # mount /dev/md/RAID0_VOL1_0p1 /mnt/boot
- インストール
ミラーリストの設定# vi /etc/pacman.d/mirrorlist
次の2つがファイルの先頭に来るように移動してください。
Japanで検索するとすぐに見つかります。## Score: 2.0, Japan Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch ## Score: 2.2, Japan Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
以下のように変更してください。
マウントしたrootパーティションにシステムをインストールします。# pacstrap -i /mnt base base-devel
fstabの作成
EFI System Partition,Swap Paritition,root,Parition以外にもマウントする場合は先にマウントしておくか、
あとでfstabを編集してください。# genfstab -U -p /mnt >> /mnt/etc/fstab
作成されたfstabを確認してみます。
# view /mnt/etc/fstab
# # /etc/fstab: static file system information # # <file system> <dir> <type> <options> <dump> <pass> # /dev/md124p3 UUID=95c9a107-353a-4b45-beaa-6a10c50d4aa6 / ext4 rw,relatime,stripe=8,data=ordered 0 1 # /dev/md124p1 UUID=DD31-1D98 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2 # /dev/md124p2 UUID=a06a4d39-4a1a-4929-bfb3-f820b4790c5e none swap defaults 0 0
- Arch Linuxの設定
以降はインストールしたシステム上で行います。
次のコマンドでシステムに移動できます。# arch-chroot /mnt /bin/bashインストール漏れなどがあってLive CDから起動しなおす場合はマウントとこのコマンドを実行してください。
ロケール設定
# vi /etc/locale.gen
今回はUTF-8で構築するので次の2つの行のコメントをはずします。
en_US.UTF-8 UTF-8 ja_JP.UTF-8 UTF-8
次のコマンドを実行します。
# locale-gen
以下のように出力されれば完了です。
Generating locales... en_US.UTF-8... done ja_JP.UTF-8... done Generation complete.
次にlocale.confを設定します。
# echo LANG=en_US.UTF-8 > /etc/locale.conf # export LANG=en_US.UTF-8
- コンソールフォントとキーボードレイアウトの設定
コンソールの設定なのでgnome,xfce4などは別途設定が必要になります。# vi /etc/vconsole.conf
KEYMAP=jp106 FONT=Lat2-Terminus16
- ロケーション設定
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
- システムクロック設定
UTCで設定します。# hwclock -u -w
- ホスト名の設定
# echo "ホスト名" > /etc/hostname
Oracleをインストールするので/etc/hostsにもホスト名を追加しておいてください。
- ネットワーク設定
以下はdhcpを利用する場合です。# systemctl enable dhcpcd.service
固定IPの場合はnetctlで設定してください。
- rootパスワード設定
パスワードの設定を忘れるとログインできなくなるので必ず実施してください。# passwd
- ブートローダーのインストール
grubのインストール
※arch linuxではapt-get,apt-cacheやyumではなくパッケージマネージャーとしてpackmanを使用します。# pacman -S grub dosfstools efibootmgr # grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug # grub-mkconfig -o /boot/grub/grub.cfg
/boot/EFI/bootにもブータブルスタブを作成。
# mkdir /boot/EFI/boot # cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi
- raidディスクの読み込み設定
raidの構成を設定ファイルに書き出す。# mdadm --examine --scan > /mnt/etc/mdadm.conf
# vi /etc/mkinitcpio.conf
HOOKS行にmdadm,mdadm_udevを追加
HOOKS="base udev mdadm_udev autodetect modconf block mdadm filesystems keyboard fsck"
# mkinitcpio -p linux
このときにmdadmモジュールとmdadm_udevモジュールをブートイメージに追加します。
mdadmの追加時にmdadm.confが読み込まれますので変更があった場合はmkinitcpioを再実行してください。ここまででインストール作業は終了です。
sshdもインストール環境にはインストールされていませんので必要な場合はopensshを導入してください。 - 起動確認
まずはシステムを移動します。# exit
後は再起動してください。
# reboot
- インストールメディアの準備次のいずれかからダウンロードしてください。
-
GUI環境の導入
- ビデオドライバーの確認
次のコマンドで必要となるドライバを確認してください# lspci | grep VGA
core i7 4790Kの場合は次のようになります。
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
intelのドライバを検索します。
# pacman -Ss video intel
パッケージが2つ見つかりましたが”(xorg-drivers xorg)”と記載されている方が必要になります
extra/xf86-video-i740 1.3.4-6 X.org Intel i740 video driver extra/xf86-video-intel 1:2.99.917+381+g5772556-1 (xorg-drivers xorg) X.org Intel i810/i830/i915/945G/G965+ video drivers
対象のドライバーをインストールします。
# pacman -S xf86-video-intel
- X関連パッケージの導入
# pacman -S xorg-server xorg-server-utils xorg-xinit xterm
- gnome関連パッケージの導入
# pacman -S gnome gnome-extra
ディスプレイマネージャを有効化します。
# systemctl enable gdm.service
localectlでX環境でのキーボード設定ファイルを作成します。
# localectl set-x11-keymap jp,us pc104 ,dvorak grp:alt_shift_toggle
作成された設定ファイルを確認します。
# view /etc/X11/xorg.conf.d/00-keyboard.conf
次のような内容で作成されるはずです。
# Read and parsed by systemd-localed. It's probably wise not to edit this file # manually too freely. Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "jp,us" Option "XkbModel" "pc104" Option "XkbVariant" ",dvorak" Option "XkbOptions" "grp:alt_shift_toggle" EndSection
GNOMEの日本語化は今回は特に必要がないので省略します。
- ビデオドライバーの確認
-
oracleのインストール
- ユーザー作成
# groupadd oinstall # groupadd dba # useradd -g oinstall -G dba oracle # passwd oracle
ホームディレクトリが自動で作成されないので手動で作成します。
# mkdir /home/oracle # chown oracle:oinstall /home/oracle # chmod 775 /home/oracle
- ulimitの設定
# vi /etc/security/limits.conf
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768
- カーネルパラメータの設定
カーネルパラメータは/etc/sysctl.confではなく/etc/sysctl.d/99-sysctl.confに設定します。# vi /etc/sysctl.d/99-sysctl.conf
kernel.sem = 250 32000 100 128 fs.file-max = 6815744 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 fs.aio-max-nr = 1048576
- 必要パッケージのインストール
# pacman -S base-devel elfutils libaio unixodbc sysstat pdksh icu gdb make binutils expat libstdc++5
- シンボリックリンク作成
※ 既に作成されている場合があります。# ln -s /usr/bin/basename /bin/basename # ln -s /usr/bin/tr /bin/tr # ln -s /usr/lib/libgcc_s.so.1 /lib/libgcc_s.so.1
- oracleのインストールについては
手順は通常通りのインストール手順になりますので省略します。
私はOracle 11.2.0.3をインストールしました。
12cについては調べた限りではインストールの成功例は見つかりませんでした。
途中でダイアログがちゃんと表示されなかったり、ライブラリが不足していたりでエラーが出ますがインストールは最後までできます。
以前はGUIとしてXfce4で構築したのですがそのときにもウィンドウの最大化が出来ないなどの問題が発生してたこともありGUI周りはどうも挙動が怪しいがしてなりません。
ローリング・リリースで日々アップデートされているOSなので今後に期待です。
- ユーザー作成