SQL Server 2017在Linux-进程上

因此,同时在12月13日,蒂姆为Microsoft Pass Linux Marathon网络研讨会完成我的幻灯片,我开始讨论苹果与orances在Linux进程管理中的SQL Server对oracle实例的比较。

我们讨论了一个人希望看到使用不同的工具与两个数据库平台的不同工具和第一个被围绕信息的差异 PMAP. 会提供。我们通常使用 PMAP. 要映射到一个特定PID的子和子进程,包括特定PID的子程序。作为我当前的图像在每个图像上都有多个数据库平台,我很快旋转了SQL Server 2017的Docker图像,以确保我有一个清洁的图像从事工作。

首先,运行什么进程?

$ ps -ef
root         1     0  0 22:22 ?        00:00:00 /bin/sh -c /opt/mssql/bin/sqlservr
root         7     1  0 22:22 ?        00:00:00 /opt/mssql/bin/sqlservr
root         9     7  3 22:22 ?        00:00:24 /opt/mssql/bin/sqlservr
root       165     0  0 22:24 pts/0    00:00:00 bash
root       300   165  0 22:34 pts/0    00:00:00 ps -ef

与Oracle不同,那里有’t单独的背景过程如 PMON.当我们在以下示例中看到,我们出现的日志编写器等。

$ ps -ef | grep orcl
delphix   2927     1  0 Nov22 ?        00:06:49 ora_vkrm_orcl
delphix   4542     1  0 18:48 ?        00:00:00 ora_w000_orcl
delphix   9331     1  0 Oct18 ?        00:04:24 ora_pmon_orcl
delphix   9333     1  0 Oct18 ?        00:05:21 ora_psp0_orcl
delphix   9335     1  0 Oct18 ?        05:45:03 ora_vktm_orcl
delphix   9339     1  0 Oct18 ?        00:01:01 ora_gen0_orcl
delphix   9341     1  0 Oct18 ?        00:01:44 ora_diag_orcl
delphix   9343     1  0 Oct18 ?        00:01:37 ora_dbrm_orcl
delphix   9345     1  0 Oct18 ?        00:16:50 ora_dia0_orcl
delphix   9347     1  0 Oct18 ?        00:00:57 ora_mman_orcl
delphix   9349     1  0 Oct18 ?        00:03:55 ora_dbw0_orcl
delphix   9351     1  0 Oct18 ?        00:18:27 ora_lgwr_orcl
delphix   9353     1  0 Oct18 ?        00:05:58 ora_ckpt_orcl
delphix   9355     1  0 Oct18 ?        00:01:36 ora_smon_orcl
delphix   9357     1  0 Oct18 ?        00:00:19 ora_reco_orcl
delphix   9359     1  0 Oct18 ?        00:05:22 ora_mmon_orcl
delphix   9361     1  0 Oct18 ?        00:12:19 ora_mmnl_orcl
delphix   9363     1  0 Oct18 ?        00:00:26 ora_d000_orcl
delphix   9365     1  0 Oct18 ?        00:00:24 ora_s000_orcl
delphix   9886     1  0 Oct18 ?        00:58:21 ora_arc0_orcl
delphix   9888     1  0 Oct18 ?        00:58:44 ora_arc1_orcl
delphix   9890     1  0 Oct18 ?        00:00:34 ora_arc2_orcl
delphix   9892     1  0 Oct18 ?        00:58:21 ora_arc3_orcl
delphix   9894     1  0 Oct18 ?        00:01:11 ora_ctwr_orcl
delphix   9896     1  0 Oct18 ?        00:00:26 ora_qmnc_orcl
delphix   9911     1  0 Oct18 ?        00:06:54 ora_cjq0_orcl
delphix  10082     1  0 Oct18 ?        00:00:27 ora_q000_orcl
delphix  10084     1  0 Oct18 ?        00:02:42 ora_q001_orcl
delphix  14181     1  0 Oct18 ?        00:01:17 ora_smco_orcl
delphix  30148     1  0 Nov22 ?        00:02:25 ora_m002_orcl
delphix  30151     1  0 Nov22 ?        00:02:27 ora_j000_orcl
delphix  30456     1  0 Nov22 ?        00:00:22 ora_j001_orcl
delphix  31062     1  0 Nov22 ?        00:02:25 ora_j002_orcl
delphix  31456     1  0 Nov22 ?        00:00:21 ora_j003_orcl

在我们的Oracle环境中,我们可以看到每个背景过程 it’s 自己的 PID 以及处理监视器(PMON.) D b writer, (DBWR.),日志作者,(LGWR.), 我们还有 归档,(ARCX.),工作处理,(J00x)性能和其他背景处理。我没有’即使是Oracle可执行文件也可以识别我们识别我们如何看到正在运行的内容。

在SQL Server环境中,我们只有两个进程 - 我们的父进程是PID 7,孩子为SQL Server的9个,没有什么可以区分他们实际正在做的事情。如果我们决定使用它 PMAP. 实用程序查看父母流程的内容 做,我们只看到了 SQL.servr.Â作为映射信息。

$ pmap -x 7

7:   /opt/mssql/bin/sqlservr
Address           Kbytes     RSS   Dirty Mode  Mapping
000000762cbcb000     888     724       0 r-x-- sqlservr
000000762cbcb000       0       0       0 r-x-- sqlservr
000000762cea8000      24      24      24 rw--- sqlservr
000000762cea8000       0       0       0 rw--- sqlservr
000000762ceae000     300      20      20 rw---   [ anon ]
000000762ceae000       0       0       0 rw---   [ anon ] 
0000400000000000       4       4       4 rw---   [ anon ]
...
ffffffffff600000       4       0       0 r-x--   [ anon ]
ffffffffff600000       0       0       0 r-x--   [ anon ]
---------------- ------- ------- ------- 
total kB           80212   13660    8896

信息映射填充了堆,(anon)信息,以及库和bin可执行文件。这里没有任何普通的,但也没有任何细节。

如果我要为Oracle做同样的事情 - Â让’s say the PMON. process, you’D查看更多信息,包括该过程正在做的事情:

$ pmap -x 9331

9331:   ora_pmon_orcl
Address           Kbytes     RSS   Dirty Mode   Mapping
0000000000400000  189264   12340       0 r-x--  oracle
000000000bed4000    2020     256      36 rw---  oracle
000000000c0cd000     348      60      60 rw---    [ anon ]
000000000c6d5000     584      84      84 rw---    [ anon ]
0000000060000000   12288     356     356 rw-s-    [ shmid=0x50001 ]
0000000060c00000  364544    2824    2824 rw-s-    [ shmid=0x58002 ]
0000000077000000    2048       4       4 rw-s-    [ shmid=0x60003 ]
...

我们会看到正在调用的每个图书馆以及内存使用情况等。_ 9的子进程显示出大大内存使用量,但我们’leve leve of of of of to继续为每个进程在数据库引擎中负责什么:

$ pmap -x 9 

9:   /opt/mssql/bin/sqlservr
Address           Kbytes     RSS   Dirty Mode  Mapping
000000006a400000       4       4       4 r---- system.sfp
000000006a400000       0       0       0 r---- system.sfp
000000006a401000    1308    1304     164 r-x-- system.sfp
...
ffffffffff600000       4       0       0 r-x--   [ anon ]
ffffffffff600000       0       0       0 r-x--   [ anon ]
---------------- ------- ------- ------- 
total kB         3064272  604820  587480

进一步挖掘到此过程并使用顶部,我们可以只过滤仅子PID 9并查看内存使用情况,但是 仍然 没有什么能告诉我们9个负责任的东西。

$ top -H -p 9
top - 22:50:39 up 34 min,  0 users,  load average: 0.00, 0.00, 0.00
Threads: 154 total,   0 running, 154 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  4042116 total,  1722984 free,   678736 used,  1640396 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.  2936276 avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND 
26 root      20   0 3017376 591652  15800 S  1.7 14.6   0:27.98 sqlservr                     
22 root      20   0 3017376 591652  15800 S  0.3 14.6   0:01.41 sqlservr                    
14 root      20   0 3017376 591652  15800 S  0.3 14.6   0:00.32 sqlservr                  
9 root       20   0 3017376 591652  15800 S  0.0 14.6   0:00.00 sqlservr                     
10 root      20   0 3017376 591652  15800 S  0.0 14.6   0:00.04 sqlservr                   
11 root      20   0 3017376 591652  15800 S  0.0 14.6   0:00.00 sqlservr                  
12 root      20   0 3017376 591652  15800 S  0.0 14.6   0:00.04 sqlservr                     
13 root      20   0 3017376 591652  15800 S  0.0 14.6   0:00.43 sqlservr      
...

我们可以验证有许多后台进程,但就像我们在开始时讨论过的那样’T任何类型的任务,让我们知道它们每个负责任。

使用PS Utility并未’T提供更多:

ps -T -p 9

  PID  SPID TTY          TIME CMD
    9     9 ?        00:00:00 sqlservr
    9     1 ?        00:00:00 sqlservr
    9     2 ?        00:00:00 sqlservr
...
    9    12 ?        00:00:00 sqlservr
...
    9    60 ?        00:00:00 sqlservr
    9    61 ?        00:00:00 sqlservr

它确实通知我们,有56个子进程连接到儿童PID 9,现在我’ve decided there’■只有一种方法来获取它背后的细节是什么。它’是时候登录数据库并查看内部:

通过SQLCMD连接:

$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘<password>’

然后查询我需要的信息,(去旧学校) sysprocesses.,作为DMVS Weren’t as efficient:

1> select spid, program_name, cmd from MASTER..sysprocesses;
2> go

spid   program_name                         cmd    
------ -----------------------------------------------------
 1                                          XTP_CKPT_AGENT 
 2                                          LOG WRITER      
 3                                          LAZY WRITER     
 4                                          RECOVERY WRITER 
 5                                          SIGNAL HANDLER 
 6                                          LOCK MONITOR    
 7                                          XIO_RETRY_WORKER
 8                                          XIO_LEASE_RENEWA
 9                                          BRKR TASK       
 10                                         TASK MANAGER    
 11                                         TASK MANAGER    
 12                                         XE TIMER        
 13                                         RESOURCE MONITOR
 14                                         XE DISPATCHER   
 15                                         TASK MANAGER    
 16                                         TASK MANAGER    
 17                                         TRACE QUEUE TASK
 18                                         SYSTEM_HEALTH_MO
 19                                         RECEIVE         
 20                                         TASK MANAGER    
 21                                         CHECKPOINT      
 22                                         TASK MANAGER    
 23                                         HADR_AR_MGR_NOTI
 24                                         BRKR EVENT HNDLR
 25                                         BRKR TASK       
 26                                         BRKR TASK       
 27                                         BRKR TASK      
 28                                         TASK MANAGER    
 29                                         TASK MANAGER    
 30                                         TASK MANAGER    
...  
 51      SQLCMD                             SELECT          
 52                                         TASK MANAGER      
 53      SQLServerCEIP                      AWAITING COMMAND
 54                                         TASK MANAGER    
 ...    
 60                                         TASK MANAGER    
 61                                         TASK MANAGER    
(61 rows affected)

如果你有好奇,我询问了什么 DMVS., 这里’s the 高水平 versions:

select thread_address, os_thread_id from sys.dm_os_threads;

select session_id, host_process_id, endpoint_id, program_name, client_interface_name, is_user_process, quoted_identifier, database_id, authenticating_database_id from sys.dm_exec_sessions;

好吧,无论如何,这会回答我的一些问题,但在那里’仍然有很多东西要学习… 🙂

 

 

D bakevlar.

http://about.me/dbakevlar

2 thoughts on “SQL Server. 2017在Linux-进程上

评论被关闭。