Mysql 서버에 로그인해서 상태를 확인한다.

우선 Mysql 서거바 어떤 쿼리를 실행하고 있는지 어떤 프로세스가 특히 오랜시간 동안 실행되고 있는지 확인하는 것이 좋다.

Mysql의   "show processlist"  라는 명령은 다음과 같은 다양한 프로세스의 정보를 보여줌으로 Mysql 서버에 로그인해서 가장 먼저 확인해 보는 것이 좋다.

  • 현재  Mysql 서버에 존재하는 전체 프로세스 목록
  • 각 프로세스가 어떤 작업(SQL)를 실행하고 있는지
  • 각 작업의 현재상태
  • 각 작업의 실행시간

 

"show processlist"  명령은 Mysql 서버에 접속된 클라이언트 수만큼의 레코드를 출력한다.  이때 스레드라 함은 실제 클라이언트와 연결돼 있는 스레드만을 의미한다. 즉 이명령의 결과로 출력되는 내용에서 한 레코드는 하나의 프로세스를 의미함과 동시에 하나의 커넥션을 의미한다.

 

 

mysql> show processlist;
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
| Id  | User      | Host              | db      | Command | Time   | State    | Info             |
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
|   5 | saferzone | localhost         | DEFCON4 | Sleep   |   5746 |          | NULL             |
|   6 | saferzone | localhost         | DEFCON4 | Sleep   |    104 |          | NULL             |
|   7 | saferzone | localhost         | DEFCON4 | Sleep   |   5779 |          | NULL             |
|   8 | saferzone | localhost         | DEFCON4 | Sleep   |   4051 |          | NULL             |
|  72 | saferzone | localhost         | DEFCON4 | Sleep   |   4922 |          | NULL             |
|  96 | root      | 127.0.0.1:40020   | DEFCON4 | Sleep   | 100545 |          | NULL             |
|  98 | root      | 127.0.0.1:40024   | DEFCON4 | Sleep   | 100375 |          | NULL             |
|  99 | root      | 127.0.0.1:40026   | DEFCON4 | Sleep   |     24 |          | NULL             |
| 146 | root      | 192.168.2.2:59488 | DEFCON4 | Sleep   |  25743 |          | NULL             |
| 159 | root      | 192.168.2.3:57341 | DEFCON4 | Sleep   |   4114 |          | NULL             |
| 163 | root      | localhost         | NULL    | Query   |      0 | starting | show processlist |
+-----+-----------+-------------------+---------+---------+--------+----------+------------------+
11 rows in set (0.00 sec)

 

위 내용에서 주의깊게 봐야 할 항목은 Command 칼럼의 값과 Time 칼럼이다. 때로는 Info 칼럼에 출력되는 SQL도 간단히 문제의 원인을 찾는데 많은 도움이 된다.

 

  • Command 가  "Sleep" 이나 "Binlog Dump" 상태가 아닌 프로세스는 대부분 클라이언트의 요청으로 SQL을 실행하고 있음을 의미하는데, 이때 Time 칼럼의 값이 그 작업을 몇 초 동안 실행하고 있는지 알려준다.
  • 만약 특정 쿼리를 실행하고 있는 프로세스가 오랜 시간 동안 실행되고 있다면 해당 프로세스의 State 값을 확인하자 State 칼럼은 그 작업이 현재 어떤 상태인지를 보여주는데,  Waiting 일때는 다른 프로세스가 선점하고 있는 잠금을 기다리는 것을 의미한다. Waiting 상태의 프로세스가 많을 때는 대부분 테이블의 잠금을 획득하고 해제하지 않아서 이런 현상이 발생한다. 도한 갑자기 너무 많은 사용자가 테이블 한두 개를 집중적으로 읽고 쓸때도 이런 현상이 나타난다. State가 Waiting 상태로 표시되는 것은 테이블 잠글을 기다릴때만 해당되며, InnoDB 스토리지 엔진의 레코드 잠금은 Waiting 으로 표시되지 않고 update라고 표시된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

uptime  명령으로 1분, 5분, 15분 간의  CPU가 처리해야할 작업이 얼마나 쌓여 있는지 대략적으로 확인할 수 있다.

 

현재 CPU가 어떤 작업에 주로 사용되고 있는지 알아보려면 vmstat(Virtual Memory) 를 이용하면 된다.

일반적으로 vmstat는 1초 단위의 시간 간격을 파라미터로 사용한다. 
명령어 실행시 파라미터로 1초를 적용하면  1초 동안 샘플링된 상태 값을 1초 단위로 출력한다.

 

[root@localhost ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 6050228  33584 332100    0    0    47     6  101  226  1  1 98  0  0
 0  0      0 6050212  33584 332100    0    0     0     0   97  223  0  1 99  0  0
 0  0      0 6050212  33584 332100    0    0     0     0  108  233  0  0 100  0  0
 0  0      0 6050212  33584 332100    0    0     0     0   93  216  0  0 100  0  0
 0  0      0 6050212  33584 332100    0    0     0     0   95  219  0  1 99  0  0

 

vmstat 는 가상메모리의 상태를 보여주는 명령이지만, CPU나 프로세스 큐를 확인하는 용도로 더 많이 사용한다.

vmstat 유틸리티의 결과에서 proc 섹션과 cpu 섹션을 주로 참고한다.

 

procs  -r  : 프로세스 큐에서 cpu가 실행해주기를 기다리는 프로세스의 수

procs  -b : 지정된 이벤트가 발생하기 전까지는 실행될 수 없는 프로세스의 수

cpu   -us : 사용자 프로세스를 위해 사용한 cpu사용률로 mysqld 서버의 코드와 같이 애플리케이션의 코드가 사용한 

               cpu 시간을 의미한다. 대표적으로 정렬이나 group by 작업, 그리고 압축과 같은 작업이 많이 발생하는 자입                 에서는 사용자 cpu가 높게 나타난다.

cpu   -sy : 커널이 사용한 cpu 시간을 의미한다.

cpu   -id : cpu가 아무것도 하지 않고 대기(idle)하는데 사용한 cpu 사용률이다.

cpu  -wa : 디스크 입축력을 기다리는데 사용한 cpu 사용률을 의미한다. 주로 DBMS 서버가 실행 중인장비에서 관심을                둬야 할 값인데, wa(wait I/O) 값이 높으면 디스크 I/O가 과도하게 많이 발생해 cpu가 데이터의 입출력을

              기다리는 시간이 많다는 것을 의미한다.  

cpu  -st : 가상 머신으로부터 빼앗긴 시간을 의미하는데, 크게 신경쓰지 않아도 된다.

 

 

 

[ RAID 확인 ]

Linux  서버에 장치/설정 된 RAID 장비의 구성 정보를 확인하는 방법으로  /proc/mdstat 정보로 확인할 수 있다.

 

RAID 어레이 상태를 확인하기

[root@localhost ~]# more /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda[0] sdb[0]
40692224 blocks 256k chunks

두개의 하드디스크 sda 와  sdb 디스크가 raid1 로 활성상태로 구성되어 있다.

실제로  df -h 와 같은 명령으로 확인해 보면 해다 디스크는 /dev/md0 디바이스로 마운트 되어 있는것을 확인할 수 있다.

포멧과 같은 명령도 해다 마운트 명으로 진행하여야 한다.

 

 

[ mdadm 명령으로 RAID 만들기 ]

 

mdadm 명령으로 RAID 스토리지 설정하기

mdadm 명령을 이용하여 여러개의 장치를 원하는 형식의 어레이로 구성할 수 있다.

 

(RAID 설정 파일 생성 하기)

[root@AP1 /]# more /etc/mdadm.conf 
DEVICE /dev/sdb /dev/sdc
ARRAY /dev/md0 devices=/dev/sdb,/dev/sdc

두개의 하드디스크 /dev/sdb dev/sdc 를 어레이 /dev/md0 로 구성한다.

 

(RAID 구성 명령어 실행하기)

[root@AP1 etc]# mdadm -C /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb /dev/sdc
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

(RAID 포멧하기)

[root@AP1 proc]# mkfs.ext4 /dev/md0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 523776 blocks
26188 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

(생성된 RAID 상세정보확인하기)

[root@AP1 /]# mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Nov 16 17:41:05 2019
     Raid Level : raid1
     Array Size : 2095104 (2046.34 MiB 2145.39 MB)
  Used Dev Size : 2095104 (2046.34 MiB 2145.39 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sat Nov 16 17:43:50 2019
          State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : AP1:0  (local to host AP1)
           UUID : 06062d56:89418a5c:b1916725:708007bf
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts