数据库后端进程是如何接收到前端的SQL语句呢?

数据库后端进程是如何接收到前端的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, 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fgh431

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值