-->

2011-08-08

LIMIT付きのSELECT文の行数

参考URL。
http://www.postgresql.org/docs/8.4/static/tutorial-window.html
http://www.postgresql.jp/document/8.4/html/tutorial-window.html
http://hibari.2ch.net/test/read.cgi/db/1294641578/401-497

PostgreSQL。
$ eix postgresql-server -cI
[I] dev-db/postgresql-server (9.0.4-r1(9.0)@2011年07月04日): PostgreSQL server

user=# CREATE TABLE test001 (id SERIAL, data TEXT);
NOTICE:  CREATE TABLEはシリアル列"test001.id"用に暗黙的なシーケンス"test001_id_seq"を作成します。
CREATE TABLE
user=# INSERT INTO test001 (data) VALUES ('aaa');
INSERT 0 1
user=# INSERT INTO test001 (data) VALUES ('bbb');
INSERT 0 1
user=# INSERT INTO test001 (data) VALUES ('ccc');
INSERT 0 1
user=# SELECT * FROM test001 ORDER BY id DESC;
 id | data
----+------
  3 | ccc
  2 | bbb
  1 | aaa
(3 行)

user=# SELECT COUNT(*) AS cntall FROM test001;
 cntall
--------
      3
(1 行)

user=# SELECT *,COUNT(*) OVER() AS cntall FROM test001 ORDER BY id DESC LIMIT 1;
 id | data | cntall
----+------+--------
  3 | ccc  |      3
(1 行)

user=#

MySQL。
$ eix -e dev-db/mysql -cI
[I] dev-db/mysql (5.1.56@2011年05月09日): A fast, multi-threaded, multi-user SQL database server.

mysql> CREATE TABLE test001 (id SERIAL, data TEXT);
Query OK, 0 rows affected (0.23 sec)

mysql> INSERT INTO test001 (data) VALUES ('aaa');
Query OK, 1 row affected (0.93 sec)

mysql> INSERT INTO test001 (data) VALUES ('bbb');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO test001 (data) VALUES ('ccc');
Query OK, 1 row affected (0.14 sec)

mysql> SELECT * FROM test001 ORDER BY id DESC;
+----+------+
| id | data |
+----+------+
|  3 | ccc  |
|  2 | bbb  |
|  1 | aaa  |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT COUNT(*) AS cntall FROM test001;
+--------+
| cntall |
+--------+
|      3 |
+--------+
1 row in set (0.00 sec)

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM test001 ORDER BY id DESC LIMIT 1;
+----+------+
| id | data |
+----+------+
|  3 | ccc  |
+----+------+
1 row in set (0.00 sec)

mysql> SELECT FOUND_ROWS() AS cntall;
+--------+
| cntall |
+--------+
|      3 |
+--------+
1 row in set (0.00 sec)

mysql>

2011-08-04

gentooのOS起動時の設定の修正のメモ

システム更新後、OS起動時にiptablesがエラーになるので /etc/rc.conf の rc_parallel="YES" をNOに戻しました。
上記の修復時に /dev/md1 などがインストールCD利用後に名前が変わるので /etc/fstab にUUIDで指定しました。
grub.conf に UUIDではなく real_root=/dev/md126 を指定しました。書き方が間違っている、もしくは、grubが未対応でした。



以下は詳細。

起動時にsysctlでエラー。
起動後にsysctl再起動でエラー無し。
起動時にbridgeモジュールが呼ばれていない。
どこかで起動後までに呼ばれる。
$ lsmod | grep ^bridge
bridge                 61076  0

たぶん以前に自動で追記された。これが無いとホストOS以外からsshなどができない。ブリッジのiptablesをoff。
> #
> # Setup bridge interface for KVM
> #
> net.bridge.bridge-nf-call-arptables = 0
> net.bridge.bridge-nf-call-iptables = 0
> net.bridge.bridge-nf-call-ip6tables = 0

$ cat /proc/sys/net/bridge/bridge-nf-call-arptables
0

mdXXが変化するのでUUIDに変えた。grubの方はreal_root=UUID=xxxとしてもダメだったので直接指定した。
たぶんgrubのバージョンが古い、か記述内容が悪い。

mdXXXが変化した流れは、
OS起動時にiptablesが永遠に起動しない?
=> インストールCDで起動して修正する
=> mdXXが変わった。swapだけ戻してみたところ戻ったがUUIDに変更した。

$ rcsdiff -r1.6 /etc/config-archive/etc/fstab,v /etc/fstab
===================================================================
RCS file: /etc/config-archive/etc/fstab,v
retrieving revision 1.6
diff -r1.6 /etc/fstab
17,20c17,20
< /dev/md1              /boot           ext2            noauto,noatime  1 2
< /dev/md3              /               ext4            noatime         0 1
< /dev/md4              /mnt/share      ext4            noatime         0 1
< /dev/md2              none            swap            sw              0 0
---
> UUID="87371e13-1bc9-4545-9c6e-4ef68e95551a"   /boot           ext2            noauto,noatime  1 2
> UUID="57dc8825-419e-46e4-9c80-acc1d644f7ac"   /               ext4            noatime         0 1
> UUID="e5ab4584-6bde-4e4d-ae0d-ce990d5dae7d"   /mnt/share      ext4            noatime         0 1
> UUID="9867bd93-a5da-4919-b69c-5a73a887c1d1"   none            swap            sw              0 0

$ rcsdiff -u -r1.24 /etc/config-archive/boot/grub/grub.conf,v /boot/grub/grub.conf
===================================================================
RCS file: /etc/config-archive/boot/grub/grub.conf,v
retrieving revision 1.24
diff -u -r1.24 /boot/grub/grub.conf
--- /boot/grub/grub.conf        2011/06/08 01:00:24     1.24
+++ /boot/grub/grub.conf        2011/08/02 09:16:16
@@ -10,7 +10,7 @@

 title Gentoo Linux 2.6.38-hardened-r6
 root (hd0,0)
-kernel /boot/kernel-genkernel-x86_64-2.6.38-hardened-r6 root=/dev/ram0 init=/linuxrc ramdisk=8192 udev domdadm real_root=/dev/md3
+kernel /boot/kernel-genkernel-x86_64-2.6.38-hardened-r6 root=/dev/ram0 init=/linuxrc ramdisk=8192 udev domdadm real_root=/dev/md126
 initrd /boot/initramfs-genkernel-x86_64-2.6.38-hardened-r6

 title Gentoo Linux 2.6.36-hardened-r9

swapoffして再作成したら戻った。
sudo swapoff -a
sudo mdadm --misc --stop /dev/md2
sudo mdadm --create /dev/md2 --metadata=0.90 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2

$ cat /proc/mdstat
Personalities : [raid1]
md124 : active raid1 sdb1[1] sda1[0]
      256896 blocks [2/2] [UU]

md2 : active raid1 sdb2[1] sda2[0]
      15631168 blocks [2/2] [UU]

md127 : active raid1 sdb4[1] sda4[0]
      929617216 blocks [2/2] [UU]

md126 : active raid1 sdb3[1] sda3[0]
      31254336 blocks [2/2] [UU]

unused devices: <none>

起動時のモジュールの追加。
$ rcsdiff /etc/config-archive/usr/share/genkernel/arch/x86_64/modules_load,v /usr/share/genkernel/arch/x86_64/modules_load
===================================================================
RCS file: /etc/config-archive/usr/share/genkernel/arch/x86_64/modules_load,v
retrieving revision 1.7
diff -r1.7 /usr/share/genkernel/arch/x86_64/modules_load
17c17
< MODULES_NET="r8169 mii ipv6"
---
> MODULES_NET="r8169 mii ipv6 bridge iptable_filter"

$ sudo genkernel --makeopts="-j8 KCFLAGS=\\\"-march=amdfam10 -mcx16 -msahf -mpopcnt --param l1-cache-size=64 --param l1-cache-line-size=64 --param l2-cache-size=512 -mtune=amdfam10 -Os\\\"" --kernel-config=/etc/kernels/kernel-config-x86_64-2.6.38-hardened-r6 initramfs

起動時にiptablesがONだと起動できない状態に変化無し。
$ rc-update show | grep ipt
             iptables |      default

OS起動時のソフトウェア起動の並列化をOFF。
$ rcsdiff /etc/config-archive/etc/rc.conf,v /etc/rc.conf
===================================================================
RCS file: /etc/config-archive/etc/rc.conf,v
retrieving revision 1.9
diff -r1.9 /etc/rc.conf
10c10
< rc_parallel="YES"
---
> rc_parallel="NO"

いつの更新でOS起動が出来なくなっていたかは不明。