DB/postgreSQL

2024.06.21 - [DB/postgreSQL] - DELETE와 UPDATE 쿼리문의 차이점

 

DELETE와 UPDATE 쿼리문의 차이점

DELETE와 UPDATE를 통한 "삭제"의 차이점 DELETE로 삭제: 해당 행이 테이블에서 완전히 제거된다. 이 작업은 데이터 복구가 어렵거나 불가능할 수 있습니다. 삭제된 데이터를 복구하려면 백업이 필요

nomajorkorean.tistory.com

 

 

# SELECT * FROM agentinfo ;

 _agentid |          _agentname          | _enabled | _connected | _updated | _shorttermbasic | _shorttermproc | _shorttermio | _shorttermcpu | _longtermbasic | _longtermproc | _longtermio | _longtermcpu |   _model   | _serial  | _group |  _ipaddress   | _pscommand |                       _logevent                       | _processevent | _timecheck | _disconnectedtime | _skipdatatypes | _virbasicperf | _hypervisor |  _serviceevent  | _installdate | _ibmpcrate | _updatedtime
----------+------------------------------+----------+------------+----------+-----------------+----------------+--------------+---------------+----------------+---------------+-------------+--------------+------------+----------+--------+---------------+------------+-------------------------------------------------------+---------------+------------+-------------------+----------------+---------------+-------------+-----------------+--------------+------------+--------------
        4 | jwchoi_ol7_2                 |        1 |          1 |        0 |               2 |              5 |            5 |             5 |            600 |           600 |         600 |          600 | VirtualBox | 0        |        | 192.168.0.34  |            | "1,*,/var/log/messages"                               |               |          1 |        1718974447 |              0 |             1 |           0 |                 |   1718273170 |          0 |   1718974485
        0 | NULL                         |        0 |          0 |          |                 |                |              |               |                |               |             |              |            |          |        |               |            |                                                       |               |            |                   |                |               |             |                 |              |            |
        3 | jwchoi_ol7                   |        1 |          1 |        0 |               2 |              5 |            5 |             5 |            600 |           600 |         600 |          600 | VirtualBox | 0        |        | 192.168.0.34  |            |                                                       |               |          1 |        1718974447 |              0 |             1 |           0 |                 |   1718271967 |          0 |   1718974486
        1 | OL7.9.myguest.virtualbox.org |        1 |          0 |        0 |               2 |              5 |            5 |             5 |            600 |           600 |         600 |          600 | VirtualBox | 0        |        | 192.168.138.1 |            |                                                       |               |          1 |        1718271964 |              0 |             1 |           0 |                 |   1718015944 |          0 |   1718271964
        2 | jaewoochoi                   |        1 |          1 |        0 |               2 |              5 |            5 |             5 |            600 |           600 |         600 |          600 | 21F6S00M00 | PF40J09A |        | 192.168.0.34  |            | "2,postgresqlDB,windowsevent messageon : application" | postgres.exe  |          1 |        1718982916 |              0 |             1 |           0 | onTuneService,0 |   1718270569 |          0 |   1718982930
(5개 행)
// Agentinfo 테이블 조회

 

 

 

# SELECT _agentid, _agentname, _enabled  FROM agentinfo WHERE _agentname='jaewoochoi';  

 _agentid | _agentname | _enabled
----------+------------+----------
        2 | jaewoochoi |        1
(1개 행)
// onTune Agent 삭제 및 onTuneAdmin.exe 에서 대상 호스트를 삭제했다면 _enabled가 2로 조회된다.

 

 

# UPDATE agentinfo set _enabled='2' WHERE _agentname='jaewoochoi';

UPDATE 1
// 상태 변경 -> 2

 

 

# SELECT _agentid, _agentname, _enabled FROM agentinfo WHERE _agentname='jaewoochoi';

 _agentid | _agentname | _enabled
----------+------------+----------
        2 | jaewoochoi |        2
(1개 행)
// 다시 조회

 

 

 

 

Admin으로 확인 ,

Agent 서버가 삭제된 것을 확인할 있다.

 

 

 

 

# SELECT _agentid ,_agentname ,_enabled FROM agentinfo WHERE _agentname='jaewoochoi';

 _agentid | _agentname | _enabled
----------+------------+----------
        2 | jaewoochoi |        2
(1개 행)

 

 

 

# UPDATE agentinfo SET _enabled='1' WHERE _agentname='jaewoochoi';

UPDATE 1
// 서버 상태 변경 -> 1

 

 

# SELECT _agentid ,_agentname ,_enabled FROM agentinfo WHERE _agentname='jaewoochoi';

 _agentid | _agentname | _enabled
----------+------------+----------
        2 | jaewoochoi |        1
(1개 행)
// _enabled가 1로 변경되었으면, onTuneAdmin 에서 대상 호스트의 에이전트와 통신이 되는지 확인한다.

 

 

 

Admin으로 확인 ,

Agent 서버가 활성화 것을 확인할 있다.

 

 

 

 

 

DELETE UPDATE를 통한 "삭제"의 차이점

 

  • DELETE로 삭제: 해당 행이 테이블에서 완전히 제거된다. 이 작업은 데이터 복구가 어렵거나 불가능할 수 있습니다. 삭제된 데이터를 복구하려면 백업이 필요하다.

 

  • UPDATE "삭제": 실제로 데이터를 삭제하지 않고, 특정 열의 값을 변경하여 삭제된 것처럼 보이게 할 수 있다. 예를 들어, _enabled 열을 0으로 설정하여 해당 행이 비활성화된 것으로 처리할 수 있다.  이 방법은 데이터를 물리적으로 삭제하지 않고, 나중에 필요할 때 복구할 수 있는 장점이 있다.

 

 

이 쿼리는 _agentname이 jaewoochoi인 모든 행을 테이블에서 완전히 제거한다.

DELETE FROM agentinfo WHERE _agentname='jaewoochoi';

 

 

이 쿼리는 _agentname이 jaewoochoi인 모든 행의 _enabled 열을 0으로 설정하여 비활성화 상태로 만든다. 행 자체는 여전히 테이블에 존재한다.

UPDATE agentinfo SET _enabled='0' WHERE _agentname='jaewoochoi';

 

 

 

 

테스트

2024.06.21 - [DB/postgreSQL] - 테이블 DELETE 후 VACUUM 테스트

 

테이블 DELETE 후 VACUUM 테스트

# SELECT * FROM hostinfo WHERE _agentid='1'; _agentid |          _hostname           | _hostnameext |                            _os                             | _fw | _agentver

nomajorkorean.tistory.com

 

VACUUM 

1) 공간 재사용

1. 데이터베이스에서 레코드를 삭제하면 물리적인 공간은 여전히 사용 중이지만, 해당 데이터는 더 이상 필요하지 않는다.
2. 삭제된 데이터가 차지하고 있던 공간을 다시 사용 가능하게 만들어 공간 효율성을 높인다.

 

2) 성능개선

 

3) MVCC 관리

데이터베이스 시스템에서 Multi-Version Concurrency Control (MVCC) 메커니즘을 관리하는 데 필수적이다.

MVCC는 트랜잭션 격리 수준을 지원하고, 동시성을 관리하는 데 사용되어 정기적인 VACUUM 작업이 필요하다.

 

 

 

테스트

=====

# SELECT * FROM hostinfo WHERE _agentid='1';
 _agentid |          _hostname           | _hostnameext |                            _os                             | _fw | _agentversion |   _model   | _serial | _processorcount | _processorclock | _memorysize | _swapsize | _poolid | _replication | _smt | _micropar | _capped | _ec | _virtualcpu | _weight | _cpupool | _ams |  _allip   | _numanodecount |   _btime
----------+------------------------------+--------------+------------------------------------------------------------+-----+---------------+------------+---------+-----------------+-----------------+-------------+-----------+---------+--------------+------+-----------+---------+-----+-------------+---------+----------+------+-----------+----------------+------------
        1 | OL7.9.myguest.virtualbox.org |              | Linux(Oracle Linux) 5.4.17-2136.331.7.el7uek.x86_64 x86_64 |     | V4.31.49      | VirtualBox | 0       |               2 |            2188 |        3629 |         0 |      -1 |            0 |    0 |         0 |       0 |  -1 |           2 |      -1 |       -1 |    0 | 10.0.2.15 |                | 1718238672

(1개 행)


# DELETE FROM hostinfo WHERE _agentid='1';
DELETE 1

# SELECT FROM hostinfo WHERE _agentid='1';
--
(0개 행)

 


# SELECT * FROM hostinfo;
 _agentid |  _hostname   | _hostnameext |                            _os                             |   _fw   | _agentversion |   _model   | _serial  | _processorcount | _processorclock | _memorysize | _swapsize | _poolid | _replication | _smt | _micropar | _capped | _ec | _virtualcpu | _weight | _cpupool | _ams |                        _allip                         | _numanodecount |   _btime
----------+--------------+--------------+------------------------------------------------------------+---------+---------------+------------+----------+-----------------+-----------------+-------------+-----------+---------+--------------+------+-----------+---------+-----+-------------+---------+----------+------+-------------------------------------------------------+----------------+------------
        4 | jwchoi_ol7_2 |              | Linux(Oracle Linux) 5.4.17-2136.331.7.el7uek.x86_64 x86_64 |         | V4.31.49      | VirtualBox | 0        |               2 |            2188 |        3629 |         0 |      -1 |            0 |    0 |         0 |       0 |  -1 |           2 |      -1 |       -1 |    0 | 10.0.2.15,192.168.138.4                               |                | 1718925744
        3 | jwchoi_ol7   |              | Linux(Oracle Linux) 5.4.17-2136.331.7.el7uek.x86_64 x86_64 |         | V4.31.49      | VirtualBox | 0        |               2 |            2188 |        3629 |         0 |      -1 |            0 |    0 |         0 |       0 |  -1 |           2 |      -1 |       -1 |    0 | 10.0.2.15                                             |                | 1718925744
        2 | jaewoochoi   |              | Windows 11 Pro                                             | Unknown | V4.1.13.1     | 21F6S00M00 | PF40J09A |              12 |            1900 |       16056 |         0 |      -1 |            0 |    0 |         0 |       0 |   0 |          12 |       0 |        0 |    0 | 192.168.56.1,192.168.138.1,192.168.1.150,192.168.0.34 |                | 1718544487
(3개 행)
// 삭제한 hostname이 삭제가 잘 되었는지 조회

 

 


# SELECT _hostname FROM hostinfo WHERE _hostname LIKE '%box' ORDER BY 1;
 _hostname
-----------
(0개 행)
//삭제한 Hostname 조회

 

 

# VACUUM FULL FREEZE ANALYZE hostinfo;

//삭제한 hostinfo 테이블 VACUUM

 

 

# SELECT * FROM hostinfo;

 _agentid |  _hostname   | _hostnameext |                            _os                             |   _fw   | _agentversion |   _model   | _serial  | _processorcount | _processorclock | _memorysize | _swapsize | _poolid | _replication | _smt | _micropar | _capped | _ec | _virtualcpu | _weight | _cpupool | _ams |                        _allip                         | _numanodecount |   _btime
----------+--------------+--------------+------------------------------------------------------------+---------+---------------+------------+----------+-----------------+-----------------+-------------+-----------+---------+--------------+------+-----------+---------+-----+-------------+---------+----------+------+-------------------------------------------------------+----------------+------------
        4 | jwchoi_ol7_2 |              | Linux(Oracle Linux) 5.4.17-2136.331.7.el7uek.x86_64 x86_64 |         | V4.31.49      | VirtualBox | 0        |               2 |            2188 |        3629 |         0 |      -1 |            0 |    0 |         0 |       0 |  -1 |           2 |      -1 |       -1 |    0 | 10.0.2.15,192.168.138.4                               |                | 1718925744
        3 | jwchoi_ol7   |              | Linux(Oracle Linux) 5.4.17-2136.331.7.el7uek.x86_64 x86_64 |         | V4.31.49      | VirtualBox | 0        |               2 |            2188 |        3629 |         0 |      -1 |            0 |    0 |         0 |       0 |  -1 |           2 |      -1 |       -1 |    0 | 10.0.2.15                                             |                | 1718925744
        2 | jaewoochoi   |              | Windows 11 Pro                                             | Unknown | V4.1.13.1     | 21F6S00M00 | PF40J09A |              12 |            1900 |       16056 |         0 |      -1 |            0 |    0 |         0 |       0 |   0 |          12 |       0 |        0 |    0 | 192.168.56.1,192.168.138.1,192.168.1.150,192.168.0.34 |                | 1718544487
(3개 행)
// hostinfo 테이블 조회

===

 

VACUUM FULL FREEZE ANALYZE

 

  • FULL: 테이블을 완전히 잠그고, 테이블의 모든 데이터를 재작성하여 디스크 공간을 최대한 회수
  • FREEZE: 테이블의 트랜잭션 ID를 갱신하여 매우 오래된 트랜잭션으로 인한 문제를 방지
  • ANALYZE: 테이블의 통계를 수집하여 쿼리 플래너가 보다 최적화된 쿼리 실행 계획을 수립할 수 있도록 함

 

OS 환경

- Oracle Linux 7.9 

- 다운로드 : https://yum.oracle.com/oracle-linux-isos.html

 

Oracle Linux ISOs | Oracle, Software. Hardware. Complete.

Oracle Linux Installation Media Download Oracle Linux ISOs

yum.oracle.com

 

DB 환경

- PostgreSQL 12 

- 다운로드 : https://www.postgresql.org/download/linux/redhat/

 

PostgreSQL: Downloads

 

www.postgresql.org

 

OS는 virtualbox 를 사용하여서 설치하였다. (https://www.virtualbox.org/wiki/Downloads)

내부 외부 통신을 위해서는 NAT+호스트 전용 어댑터 방식으로 네트워크를 구성하는 게 좋습니다.

 

public IP에서 외부망을 통해 설치를 하는 과정이기 때문에 간단합니다.

 

==
postgreSQL 공식 설치 가이드

==

1. yum 으로 postgreSQL을 설치하기 위해 하위의 의존성이 존재하는 RPM 패키지를 모두 설치.

 

2. 설치한 RPM 패키지를 확인

 

3. yum으로 postgreSQL 서버 설치

 

4. 서비스 확인

 

5. DB 초기화 + 자동 기동 설정 (enable)
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12

 

6. 접속 테스트 및 버전 확인 

 

 

 

 

'DB > postgreSQL' 카테고리의 다른 글

UPDATE문로 테이블 수정 및 활성화  (0) 2024.06.21
DELETE와 UPDATE 쿼리문의 차이점  (0) 2024.06.21
테이블 DELETE 후 VACUUM 테스트  (0) 2024.06.21

+ Recent posts