データベースに接続中のセッションを強制切断する方法
データベースに関する設定を行う時に、接続中のユーザがいると操作が正常に行えない場合があります。 そんな場合の対処です。
前提
Software | Version |
---|---|
PostgreSQL | 9.6.1 |
手順
postgres=# alter database xxxxdb rename to xxxxdb_org; ERROR: database "xxxxdb" is being accessed by other users DETAIL: There are 2 other sessions using the database.
この場合、接続中のユーザセッションを強制的に切断後に再実行します。
まずは、接続中のユーザのpidを以下のコマンドで求めます。
postgres=# SELECT pid FROM pg_stat_activity where pid <> pg_backend_pid(); pid ------- 15725 16586 (2 rows)
参考 PostgreSQL: Documentation: 9.6: System Administration Functions
上記のように2ユーザいるので、それぞれのpidを強制切断します。
SELECT pg_terminate_backend(15725); pg_terminate_backend ---------------------- t (1 row) SELECT pg_terminate_backend(16586); pg_terminate_backend ---------------------- t (1 row)
これで再実行します。
postgres=# alter database xxxxdb rename to xxxxdb_org; postgres=#
dockerコンテナの日本語対応(centos)
dockerで公式centosイメージからコンテナを起動すると、時間とエンコードが日本語に対応していないので困った時の対策です。
前提
Software | Version |
---|---|
Docker | 17.06.2-ce |
手順
まずはcentosイメージをダウンロードします。
docker pull centos:latest % docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 328edcd84f1b 5 weeks ago 193MB centos 6.8 0cd976dc0a98 12 months ago 195MB
続いて、ダウンロードしたイメージでコンテナを起動します。
% docker run -i -t centos /bin/bash [root@7f86c5aa58d6 /]#
無事にコンテナに入ったら、時間が正しいか確認してみます。
[root@7f86c5aa58d6 /]# date Tue Sep 12 15:40:21 UTC 2017
はい。UTC(協定世界時)になっているので、JST-9時間ですね。
もう時刻やらタイマーを乱用するプログラムの試験などする場合は、この上なく困ります。
更に、localeなんかも日本語等の無駄なものはイメージ作成時に軽量化のため削除されてしまっているわけです。
[root@d8e528556ee7 /]# locale LANG= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=
ですので、日本語化したcentosのイメージを新たに用意します。
イメージ生成用のDockerfileはこちら。
FROM centos:6.8 MAINTAINER "kzdev" <xxxx@gmail.com> RUN yum -y update RUN yum -y install epel-release RUN yum reinstall -y glibc-common ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LANGUAGE ja_JP:ja RUN yum clean all RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock RUN rm -f /etc/localtime RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
yum reinstall -y glibc-common
で削除されたlocale達を復活させます。
続いて時刻設定を行います。
RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock
で、ハードウェアクロックのタイムゾーンをASIAに変更します。
次にシステムクロックの変更を以下で行います。
既に配置されている/etc/localtime
を削除して、同名でASIAのタイムゾーンファイルのシンボリックリンクを作成しています。
これでdocker imageをビルドします。
% docker build ./ -t centosj ... Removing intermediate container dcb5ad3e340f Step 12/12 : RUN ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ---> Running in 6c66749583f5 ---> 967ab0235536 Removing intermediate container 6c66749583f5 Successfully built 967ab0235536 Successfully tagged testdev:latest
と出たら成功です。
稼働確認
無事にイメージを作成できたので、コンテナを起動してきちんと日本語になっているか確認してみます。
% docker run -i -t centosj /bin/bash [root@65d95e00003c /]# date 2017年 9月 13日 水曜日 01:11:32 JST [root@65d95e00003c /]# locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
日本時間と日本語化が無事に確認できました。
まとめ
必要な環境や機能が出てきたら、Dockerfileに追記してイメージを作ってコンテナを上げて使うという繰り返しになります。 一度イメージを作ってしまえば、生成や破棄はすぐに出来るので、試験やちょっとした動作確認にはもってこいです。
必要な機能を搭載したイメージに関しては、ほとんどがdocker-hubに既に上がっているので、探してなかったら作るとかの方が時短にはなると思います。
golang1.9 ReuseRecordでCSVのREADパフォーマンスが向上するかも!?
golangを1.9にアップデートしてみました。
Go 1.9 Release Notes - The Go Programming Language
release noteを見ると機能の追加からパフォーマンスの向上まで色々ありますが、
今回は、CSVのREAD性能が向上したというので、ベンチマークを取ってどのくらい改善されたのか確認します。
MacにVisualStudioCodeを使ったpython開発環境の構築
Mac上(macOS Sierra)にVisualStuioCodeをインストールして、pythonの開発環境を構築していきます。
pythonは2系と3系がありますが、今回は3系を利用します。
前提
- homebrewが導入済みであること
- VisualStudioCodeがインストール済みであること
インストール
terminalを起動し、以下の手順でpythonをインストールします。
% brew install python3 % which python3 /usr/local/bin/python3 % which pip3 /usr/local/bin/pip3
以下は、pip3でインストールすることに注意して下さい。
参考
% pip3 install virtualenv % pip3 install virtualenvwrapper
virtualenvwrapper
を使うために、以下の環境変数を追加します。
$ vim ~/.basrh
補足 zshを利用している場合は、~/.zshrcに追加して下さい。
export WORKON_HOME=~/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
追加した環境変数を読み込みます。
$ source ~/.basrh
仮想環境の作成
virtualenvにより、システム側にインストールされたpython環境と切り離した環境を作る。
基本は、システム側に大量のpackageがインストールされてカオスになることを防ぐために、基本は案件毎に仮想環境を用意して開発した方が良いです。
% mkdir /Users/kzdev/python_env % cd /Users/kzdev/python_env # mkvirtualenv <option> <仮想環境の名前> % mkvirtualenv --no-site-package venv1 # --never-download : ネットワークからDLをしない # --system-site-packages : インストール済みモジュールを使用する # --no-site-packages : インストール済みモジュールを全て外した状態で仮想環境が作成される # 作成された仮想環境がロードされた状態になる (venv1)%
VisualStudioCode設定
- Command + Shift + Pを押して、Command Paletteを起動
>shell
と入力して、以下の画像赤枠の項目を選択実行する
補足
上記の設定で、terminal上からcode
でVisualStudioCodeを起動することが出来る用になります。
Code
-基本設定
-設定
を開き、以下の設定を追記する。
"python.pythonPath": "/Users/kzdev/python_env/venv1/bin/python"
VisualStudioCodeをterminal上から起動する。
(venv1)% code .
この状態で、仮想環境のpythonを使ってdebugが出来るようになります。
試しに、debug実行を試してみます。
breakpointを指定して、プログラムを起動します。
上記の通り、指定したbreakpointで停止していることが確認できました。
これでVisualStudioCodeを使ってpython開発ができるようになりました。
IntelliJ IDEAの動作が遅い時の対策
普段は、InteliJ IDEAを使って開発しているのですが、メモリの初期設定が以下のようにかなり少ないです。
初期状態で開発を行うと、アプリケーションの規模によっては内部indexの作成に時間がかかりかなりストレスが溜まります。
開発のストレスを少しでも軽減するために、設定の変更で利用するリソースを適切に調整して対処を行います。
-Xms128m
-Xmx2048m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops
そこで、端末のメモリ状況に合わせて、ヒープサイズを増やします。
Intelijを起動して上部のHelpメニューないから下記の項目を開きます。
すると以下のようなファイルがIntelij内で開かれます。
ここの数値を今回は、以下のように変更します。
-Xms2G -Xmx4G -XX:+UseG1GC -XX:-UseParNewGC -XX:-UseConcMarkSweepGC -XX:ReservedCodeCacheSize=240m -XX:+UseCompressedOops -XX:+OmitStackTraceInFastThrow -Dsun.io.useCanonCaches=false
保存したら、InteliJを再起動して完了です。初期に比べて相当快適になりました。
参考
KEA-DHCPの構築
ISC-DHCPからKEA-DHCPに移行した際にサーバ構築を行いましたので、 構築手順をまとめます。今回の移行に至った経緯と現状の懸念事項は、以下の通りです。
採用理由
懸念事項
- DHCPフェイルオーバに未対応(RFC3074相当)
参考
- Facebook ではデータセンターにおいて Kea DHCP サーバーをどのように活用しているか?
- ISC、dhcpd やめるってよ - 次世代 ISC DHCP サーバー Kea 導入・設定ガイド
続きを読む