数据库后端进程是如何接收到前端的SQL语句呢?
- 首先我捕捉到了处理我这个连接的后端进程是3561!
test=# select pg_backend_pid();
pg_backend_pid
----------------
3561
(1 row)
- 然后我就在另一个窗口执行
sudo strace -p 3561
- 这样他就显示
Process 3561 attached
epoll_wait(3,
- 上面说明进程3561已结被strace啦!
- 似乎那个进程正发出过epoll_wait这个系统调用
- 这说明那个进程正阻塞在那里呢!
- 哈哈哈哈!
- 下边我客户端要执行1条SQL命令啦
- 然后strace那个窗口寄出来这么多东西了
ztz123@ubuntu:~$ sudo strace -p 3561
Process 3561 attached
epoll_wait(3, {{EPOLLIN, {u32=32048704, u64=32048704}}}, 1, -1) = 1
recvfrom(8, "Q\0\0\0Aselect * from test1 inner j"..., 8192, 0, NULL, NULL) = 66
lseek(6, 0, SEEK_END) = 8192
lseek(11, 0, SEEK_END) = 8192
open("/home/ztz123/Desktop/\350\207\252\345\256\232\344\271\211\347\232\204scan\346\255\243\345\234\250\350\242\253\345\212\240\345\205\245.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 12
close(12) = 0
open("/home/ztz123/Desktop/\350\207\252\345\256\232\344\271\211\347\232\204scan\346\255\243\345\234\250\350\242\253\345\212\240\345\205\245.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 12
close(12) = 0
lseek(6, 0, SEEK_END) = 8192
lseek(11, 0, SEEK_END) = 8192
lseek(11, 0, SEEK_END) = 8192
lseek(11, 0, SEEK_END) = 8192
lseek(11, 0, SEEK_END) = 8192
lseek(11, 0, SEEK_END) = 8192
sendto(7, "\2\0\0\0\10\1\0\0\0@\0\0\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 264, 0, NULL, 0) = 264
sendto(8, "T\0\0\0\212\0\6id1\0\0\0@\1\0\1\0\0\0\27\0\4\377\377\377\377\0\0id2"..., 505, 0, NULL, 0) = 505
recvfrom(8, 0xeac3a0, 8192, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(3,
- recvfrom(8, "Q\0\0\0Ase表明后端进程发出一个系统调用
- 目的就是接受SQL语句啊!
- 然后接着就是俩个lseek,难道是读取东西吗??
本大佬很奇怪:你这个进程为啥不读表呢?难道连打开表也不打开吗?我觉得可能是这次,他们都在内存的缓存里呢!所以不需要读磁盘了!
缓存未命中时候的系统调用
- 你看,果然多了吧!
- open(“base/16384/16385”, O_RDWR) = 31
- 上面这行开始打开堆表了哦!
- lseek(31, 0, SEEK_END) = 8192
- 上面将偏移位置写到文件末尾
- 返回了8192,说明文件就这么大啊
- 后面又把文件移动到末尾
- 又移动到开头,搞啥呢?
Process 3925 attached
epoll_wait(3, {{EPOLLIN, {u32=19695168, u64=19695168}}}, 1, -1) = 1
recvfrom(8, "Q\0\0\0\31select * from test1;\0", 8192, 0, NULL, NULL) = 26
open("base/16384/2663", O_RDWR) = 30
read(30, "\0\0\0\0X\265T\1\0\0\0\0@\0\360\37\360\37\4 \0\0\0\0b1\5\0\3\0\0\0"..., 8192) = 8192
lseek(30, 24576, SEEK_SET) = 24576
read(30, "\0\0\0\0h\33>\1\0\0\0\0(\0p\37\360\37\4 \0\0\0\0\350\237\20\0\220\237P\0"..., 8192) = 8192
lseek(30, 16384, SEEK_SET) = 16384
read(30, "\0\0\0\0H\27`\1\0\0\0\0\20\1\350\27\360\37\4 \0\0\0\0\300\237`\0\330\2340\0"..., 8192) = 8192
read(20, "\0\0\0\0\0104`\1\0\0\0\0\200\1P\32\360\37\4 \0\0\0\0\340\237 \0\320\237 \0"..., 8192) = 8192
lseek(21, 73728, SEEK_SET) = 73728
read(21, "\0\0\0\0\0207`\1\0\0\0\0\324\1\0\31\360\37\4 \0\0\0\0\340\237 \0\320\237 \0"..., 8192) = 8192
open("base/16384/16385", O_RDWR) = 31
lseek(31, 0, SEEK_END) = 8192
open("base/16384/2696", O_RDWR) = 32
read(32, "\0\0\0\0\330GS\1\0\0\0\0@\0\360\37\360\37\4 \0\0\0\0b1\5\0\3\0\0\0"..., 8192) = 8192
read(32, "\0\0\0\0\210GS\1\0\0\0\0P\6\20\7\360\37\4 \0\0\0\0\220\215 \0\200\215 \0"..., 8192) = 8192
open("base/16384/3379", O_RDWR) = 33
read(33, "\0\0\0\0\20\332V\1\0\0\0\0@\0\360\37\360\37\4 \0\0\0\0b1\5\0\3\0\0\0"..., 8192) = 8192
open("global/2697", O_RDWR) = 34
read(34, "\0\0\0\0\30\303Z\1\0\0\0\0@\0\360\37\360\37\4 \0\0\0\0b1\5\0\3\0\0\0"..., 8192) = 8192
read(34, "\0\0\0\0\310\302Z\1\0\0\0\0 \0\320\37\360\37\4 \0\0\0\0\340\237 \0\320\237 \0"..., 8192) = 8192
open("global/1213", O_RDWR) = 35
read(35, "\0\0\0\0(\0\0\0\0\0\4\0 \0000\37\0 \4 \0\0\0\0\230\237\310\0000\237\310\0"..., 8192) = 8192
open("/home/ztz123/Desktop/\350\207\252\345\256\232\344\271\211\347\232\204scan\346\255\243\345\234\250\350\242\253\345\212\240\345\205\245.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 36
close(36) = 0
lseek(31, 0, SEEK_END) = 8192
lseek(31, 0, SEEK_SET) = 0
read(31, "\0\0\0\0pe`\1\0\0\0\0,\0008\37\0 \4 \0\0\0\0\330\237H\0\260\237P\0"..., 8192) = 8192
sendto(7, "\2\0\0\0\250\3\0\0\0@\0\0\10\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 936, 0, NULL, 0) = 936
sendto(7, "\2\0\0\0\350\1\0\0\0@\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 488, 0, NULL, 0) = 488
sendto(7, "\2\0\0\0\10\1\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 264, 0, NULL, 0) = 264
sendto(8, "T\0\0\0H\0\3id1\0\0\0@\1\0\1\0\0\0\27\0\4\377\377\377\377\0\0id2"..., 234, 0, NULL, 0) = 234
recvfrom(8, 0xeac3a0, 8192, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(3, 12c8688, 1, -1) = -1 EINTR (Interrupted system call)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
write(10, "\0", 1) = 1
rt_sigreturn() = -1 EINTR (Interrupted system call)
recvfrom(8, 0xeac3a0, 8192, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
epoll_wait(3, {{EPOLLIN, {u32=19695192, u64=19695192}}}, 1, -1) = 1
read(9, "\0", 16) = 1
epoll_wait(3,