sudo のタイムアウトまでの時間を長くする

Ubuntu では root を使わずに sudo することになるのですが デフォルトでは 1 度 sudo してから 5 分 sudo しないと 再度パスワードの入力を求められます。

通常はそれで良いのですが まとまった作業をしているときなどは もう少し長くしたいときがあります。

sudo の設定は /etc/sudoers を visudo コマンドで編集するのですが Ubuntu10.04 だとエディタは nano が起動するので env で環境変数を変えて vi にします。
(これは私が nano を使えないからです・・・)

$ sudo env EDITOR=/usr/bin/vi visudo

元々ある Defaults の下辺りに追加します。

Defaults        env_reset                ←既存
Defaults        timestamp_timeout = 20   ←追加

これでタイムアウトまでの時間が 20 分になりました。

Defaults はカンマで区切って 1 行で書いても OK です。

Defaults        env_reset, timestamp_timeout = 20

nginx を Ubuntu10.04 に入れたときの configure の内容 (2)

前に PPA を使って nginx (1.0.5) を Ubuntu10.04 に入れたときの configure の内容を 書きましたが、 PPA を使わない nginx 0.7.65 の内容も書いておきます。

$ nginx -V

nginx version: nginx/0.7.65
TLS SNI support enabled
configure arguments:
    --conf-path=/etc/nginx/nginx.conf
    --error-log-path=/var/log/nginx/error.log
    --pid-path=/var/run/nginx.pid
    --lock-path=/var/lock/nginx.lock
    --http-log-path=/var/log/nginx/access.log
    --http-client-body-temp-path=/var/lib/nginx/body
    --http-proxy-temp-path=/var/lib/nginx/proxy
    --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
    --with-debug
    --with-http_stub_status_module
    --with-http_flv_module
    --with-http_ssl_module
    --with-http_dav_module
    --with-http_gzip_static_module
    --with-http_realip_module
    --with-mail
    --with-mail_ssl_module
    --with-ipv6
    --add-module=/build/buildd/nginx-0.7.65/modules/nginx-upstream-fair

こちらもメモ。

PostgreSQL の SEQUENCE の CACHE の動き

PostgreSQL の SEQUENCE には CACHE という設定があります。 (Oracle などにもあります)

この機能は高速化のためのもので、事前に SEQUENCE をまとめて 取得しておき、大量に SEQUENCE を発行するときに 何度も SEQUENCE を更新しないようします。

実際の動きを見てみます。

db=# CREATE SEQUENCE test_seq CACHE 3;

CACHE のみ設定して(他はデフォルトで)作成しました。
下のように設定されています。

db=# SELECT last_value, cache_value FROM test_seq;

-[ RECORD 1 ]--
last_value  | 1
cache_value | 3

nextval() で値を取得します。

db=# SELECT nextval('test_seq'); → 1 が返る

SEQUENCE は次のようになります。

db=# SELECT last_value, cache_value FROM test_seq;

-[ RECORD 1 ]--
last_value  | 3
cache_value | 3

1 回しか nextval() していませんが last_value は 3 になっています。 これは 1 を取得したときに 2, 3 をキャッシュとして取得しているためです。

もちろん nextval() を続ければ 2, 3 を取得できます。

db=# SELECT nextval('test_seq'); → 2 が返る
db=# SELECT nextval('test_seq'); → 3 が返る

これでキャッシュした分を使い切ってしまったのですが さらに nextval() してみます。

db=# SELECT nextval('test_seq'); → 4 が返る

この状態で SEQUENCE は次のようになります。

db=# SELECT last_value, cache_value FROM test_seq;

-[ RECORD 1 ]--
last_value  | 6
cache_value | 3

このように、キャッシュを使い切ると新しくキャッシュを取得しなおします。 デフォルトでは CACHE が 1 なので取得するごとにキャッシュを使い切っているわけです。

キャッシュはセッション内でのみ有効です。 この状態は、このセッション以外からは 6 まで使用済みとして扱うため 別のセッションで nextval() すると次のように 7 が返ります。

[別セッション]
db=# SELECT nextval('test_seq'); → 7 が返る

[このセッション]
db=# SELECT nextval('test_seq'); → 5 が返る

そのためキャッシュを使用すると SEQUENCE の値が時系列に 並ばないことがあるので注意が必要です。

Google サイト内検索

Amazonアソシエイト