1. MySQL hard/soft parse 

답)

1) mysql 5.7.19 에서 hard/soft parse에 대한 기능이 있는지 문의
 -  MySQL 은 ORACLE 에서 의미하는 hard/soft parse 에 대한 개념이 없습니다.
 -  모든 쿼리는 parse 단계 이후 (prepared statement 의 사용유무에 따라 다름), 실행계획을 세우는 단계를 모두 거친 후 실행이 됩니다.
    ○ MySQL 의 query cache 가 ORACLE 의 hard/soft parse 와 비슷한 기능 (parse 및 실행계획을 세우는 단계가 없이 결과를 바로 return) 을 가지고 있지만, MySQL 의 query cache 는 ORACLE 과 다르게 "결과값"도 저장하고 있어 완전히 다른 cache 임을 알려드립니다. MySQL query cache 는 테이블의 데이터가 한건이라도 변경되면 관련된 cache 를 모두 해제하게 됩니다.

2) mysql에서 쿼리 작성 시에 bind 변수 처리하여 작성하는 것과 static 변수로 작성하는 방법 간의 차이점이 있는지 문의
 -  쿼리는 일반적으로 MySQL 에 4가지 단계를 거치게 됩니다.
A) parsing
   SQL 구문을 문법에 맞게 분류하는 작업을 진행합니다. (SELECT, WHERE, GROUP BY...)
B) resolution
분류된 SQL 에 대한 정합성을 체크합니다. (관련 table 에 column 이 존재하는지에 대한 유무, subquery 혹은 join 되는 쿼리의 컬럼 정합성 체크)
C) optimization
실제 실행계획은 세우는 단계
D) execution
실제 쿼리가 실행되는 단계

위와 같은 과정에서, prepared statement (bind 변수 처리) 를 사용하신다면 A),B) 의 단계를 스킵할 수 있습니다.

 

2. MySQL 파티션 테이블 생성시 주의사항

답)
1) auto_increment 설정시, 주의사항 (복합 key를 사용할 경우)
     - InnoDB : 복합 primary key 생성시에 첫번째 컬럼으로만 사용 가능 
     - MyISAM : 복합 primary key 생성시에 두번째 컬럼으로도 사용 가능

2) virtual column 생성 및 주의사항
     - 아래와 같은 문법으로 테이블 생성시 사용 가능
     - virtual column으로 partition key로 잡아 사용할 수 없음
예)
 # `emp_dt` int(8) generated always as (DATE_FORMAT(emp_date, '%Y%m%d')) virtual
 #comment 'emp_dt 가상컬럼',

3) auto_increment + partition table 생성시, 주의사항
     - auto_increment 컬럼이 primary key의 첫번째로 오는 것이 기본
     - auto_increment 컬럼을 첫번째에 두지 않을 경우에는 key(인덱스)를 별도로 생성해서 테이블을 만들어야함

4) partiton table에서 date, datetime으로 partiton key를 잡을 경우, 주위사항
     -아래와 같이 2가지 형태로 사용이 가능
     -partition by range (to_days()) ~ partition emp values less than (to_days('2017-08-01 00:00:00')),..
     -partition by range columns () ~ partition emp values less than ('20170801'),..

 

3. MySQL metadata lock과 일반 lock의 차이관련

답)
 - 일반 잠금은 row level lock, table level lock 등
 - 메타 데이터 잠금은 DDL 문만 허용금지 (물리적 블록에 look을 거는 것이 아님)


4. MySQL 5.7.19 SQL HINT 사용

답)
 - use index (IX_EMP01)" 인덱스를 지정하는 hint(USE|FORCE|IGNORE Index)를 사용할 떄
 - 기존에 IX_EMP01 인덱스가 생성되어 있지 않으면 쿼리 수행시 error code: 1176(not exist)이 발생된다.


5. MySQL open_files_limit 파라미터 설정
(8.0.22-commercial MySQL Enterprise Server)

1) /etc/security/limits.conf

mysql hard nofile 65535
mysql soft nofile 65535

2)
[mysql_m:/mysql_data/tmp]$ulimit -Sn
65535
[mysql_m:/mysql_data/tmp]$ulimit -Hn
65535

3) my.cnf

[mysqld_safe]
open_files_limit = 8192

위와 같이 mysql 파라미터가 8192로 설정되어 있습니다.

해당 DB로 접근하여 조회해보면 65535으로 확인되는데
open_files_limit를 설정할 때 my.cnf 를 보고 세팅되지 않고 os 세팅을 기준으로 설정되는 것인지 문의드립니다.

mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 65535 |
+------------------+-------+

답)
-> root로 기동할 경우, my.cnf 에 적용된 값에 따라서 open_files_limit 값이 적용되나 아래의 조건을 따르게 됨
우선적으로는 my.cnf 에 명시된 값으로 설정되지만 그 값이 아래 조건보다 낮으면 아래 조건 중 큰 수로 설정이 됨 
- 10 + max_connections + (table_open_cache * 2)
- max_connections * 5
- open_files_limit value specified at startup, 5000 if none

-> mysql 유저로 기동할 경우 my.cnf 관계없이 OS설정값으로 설정됨(버그여부확인 필요)

 

#Oracle MySQL Q&A Summary (2020)

#Resumen de preguntas y respuestas de Oracle MySQL (2020)

#Oracle MySQL Q&Aまとめ(2020)

#Oracle MySQL问答摘要(2020)

#Oracle MySQL Q & A सारांश (2020)

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,
   

1. 대량 데이터 변경 세션에 대하여 KILL 수행 상황 (Oracle)

 - 오라클 DB에서 Insert/Update/Delete 작업을 대량으로 수행하던 도중에 세션을 정리해야하는 상황에서 commit을 할수 없어 session kill을 수행했을 때 해당 오브젝트에 대하여 Rollback이 발생되면서 wait이 걸려 세션이 증가하는 상황이 발생할때가 존재 한다. 이때 해당 세션의 Rollback 상태를 모니터링 해야할때가 존재한다.

- 큰 트랜잭션을 kill 했을 경우 복구하는 과정에서 wait for a undo record 이벤트와 PX Deq: Txn Recovery Start 이벤트가 동시에 대량으로 발생 (FAST_START_PARALLEL_ROLLBACK 파라미터가 TRUE일 경우)

- PARALLEL_ROLLBACK이 과도할 경우에 UNDO SEGMENT 부족현상이 발생될 수 있음

- 조회: select state, count(*) from V$FAST_START_SERVERS group by state;

 

1) INSERT/UPDATE/DELETE 하던 세션이 너무 오래걸려서 SESSION KILL 수행

alter system kill session 'sid,seiral#' immediate;

2) SESSION KILL 수행후, 트렌젝션 모니터링시에 ROLLBACK이 오래걸려서 아래와 같이 SPID로 KILL -9 수행

select     'kill -9 ' || spid
from      v$process
where addr in (select paddr from v$session where status='KILLED' and type != 'BACKGROUND')


2. ROLLBACK 모니터링 방법

 

1) V$SESSION 으로 wait for a undo record 이벤트 모니터링 가능

2) V$FAST_START_TRANSACTIONS 뷰로 예측 (.GV$FAST_START_TRANSACTIONS)

SELECT
         usn
       , state
       , undoblockstotal "Total"
       , undoblocksdone "Done"
       , undoblockstotal-undoblocksdone "ToDo"
       , DECODE(cputime,0,'unknown',SYSDATE+(((undoblockstotal-undoblocksdone) / (undoblocksdone / cputime)) / 86400)) "Finish at" 
FROM     v$fast_start_transactions;


[진행중]
       USN STATE                 Total       Done       ToDo Finish at
---------- ---------------- ---------- ---------- ---------- -------------------
      1109 RECOVERING          2269489      31317    2238172 2016/06/21 00:06:03


[완료]
       USN STATE                 Total       Done       ToDo Finish at
---------- ---------------- ---------- ---------- ---------- -------------------
      1109 RECOVERED             32874      32874          0 2016/06/21 00:24:21

3) x$ktuxe 뷰로 세션단위 진행사항 예측

SELECT
         ktuxeusn
       , to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') "Time"
       , ktuxesiz, ktuxesta
FROM     x$ktuxe
WHERE    ktuxecfl = 'DEAD';
  KTUXEUSN Time                  KTUXESIZ KTUXESTA
---------- ------------------- ---------- --------------
 
      1109 2016/06/20 23:07:22    1800231 ACTIVE
 

# How to monitor ROLLBACK after performing bulk data change session KILL

# Cómo monitorear ROLLBACK después de realizar KILL de sesión de cambio de datos masivos

# 大量のデータを変更セッションKILL実行後、ROLLBACK監視方法

# 执行批量数据更改会话KILL后如何监视ROLLBACK

# थोक डेटा परिवर्तन सत्र KILL करने के बाद ROLLBACK की निगरानी कैसे करें

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

 디비버(DBeaver) Tool은 다양해지고 있는 DBMS(Oracle/MySQL/PostgreSQL), NOSQL/Big DATA DB 들에 하나의 SW로 접근하여 개발시에 편리하게 질의를 수행할 수 있도록 도와주는 SW이다.  

 DB의 종류가 달라질때마다 해당되는 SW를 다운로드하여 사용하는 불편함을 디비버는 해결해주고 있으며 가볍고 간단한 사용방법으로 많은 IT종사자들이 사용중인 것으로 알고 있다. 디비버는 커뮤니티 버전과 엔터프라이즈 버전이 존재하며 무료로 커뮤니티 버전을 제공함으로써 많은 사람들에게 열려있고 SW의 패치도 활발하여 빠르게 성장하는 SW이다.

 커뮤니티 버전에 경우에는 튐김현상이나 세션이 자동으로 끊어졌을때 재연결하는 부분등 불편한 부분이 남아있고 DB에 접근할수 있는 항목들이 제한적인 부분과 UI나 데이터 추출 및 확인시에 불편한점이 존재하는데 엔터프라이즈 버전에서는 이러한 부분을 추가적으로 제공하여 더욱 편리하게 사용할 수 있도록 하고 있다.

 엔터프라이즈 버전은 유료로 달러로 금액을 지불해야 다운로드가 가능한데 해외 사이트에서 해당 SW를 크렉하여 무료로 사용할수 있도록 제공하여 소개하려한다.

 

디비버 엔터프라이즈 무료사용방법 (DBeaver Enterprise Free Download)

 

1. 설치파일 다운로드

 - 디비버 Community Edition은 아래 공식사이트를 통하여 무료로 받아 사용할수 있다. 

dbeaver.io/download/

 - 디비버 Enterprise Edition은 Community Edition보다 더 다양한 NoSQL, BigDATA DB에 접근하여 사용이 가능하며 데이터 뷰나 수정, ERD등의 추가적인 기능을 제공한다.

 - 디비버 Enterprise Edition 유로로 다운로드하여 사용할 수 있는 SW인데 크렉을 통하여 무료로 사용가능하도록 제공하는 사이트가 존재한다. 아래 절차대로 다운로드하여 사용하면 된다.                                                           

getintopc.com/softwares/management/dbeaver-enterprise-free-download/

해당 프로그램에 대한 최소 스펙정보가 있으니 참고하여 설치가 필요
위 이미지 절차대로 수행하면 불필요한 광고 없이 다운로드 가능

 

2. 설치 파일 실행 및 설치 완료

 - 다운로드가 완료되면 아래와 같이 패스워드(123)을 입력하여 압축을 풀어준다. 그후에 32비트/64비트에 맞는 설치 파일을 수행하여 설치를 진행한다.

설치 파일확인, Readme에 세팅 방법참고
설치 진행시 설치경로를 기록해 두어야 crack 작업시 수월함

 

3. DBeaver Enterprise 사용인증(crack)

 - 설치 경로 확인 (C:\Users\Invest\AppData\Local\DBeaverEE)

 - 설치파일에 있던 Crack폴더의 dbeaver-agent.jar 파일을 설치 경로로 복사 붙여넣기 한다.

 - 해당 설치경로의 dbeaver.ini 파일을 열어 dbeaver-agent.jar이 위치하고 있는 경로와 파일명을 지정하여 넣고 저장한다.

 - dbeaver.exe 실행파일을 실행하여 SW를 사용한다.

dbeaver-agent.jar 파일을 복사 붙여넣기
dbeaver.ini 파일을 수정
dbeaver 파일 실행

 

해당 설치 파일은 DBeaver Enterprise 6.3 버전으로 최신 버전보다는 낮은 버전이지만 사용하는데 큰 문제는 없는 것 같다.

 

#DBeaver Enterprise

#How to use Debugger Enterprise for free

Oracle
MySQL
PostgreSQL
Ms-SQL
MongoDB
Cassandra
InfluxDB
Redis
Amazon DynamoDB
Google Bigtable
Couchbase
CouchDB

 

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

1. 트랜잭션(Transaction)의 개요

 1-1. 트랜잭션(Transaction)의 정의

  - 한 번에 수행되어야 할 데이터베이스의 일련의 Read와 Write 연산을 수행하는 단위 (Logical Unit of Work)

 

 1-2. 트랜잭션(Transaction)의 특징

   1) Atomicity (원자성) : 분해가 불가능한 최소 단위

   2) Consistency (일관성) : 트랜잭션이 실행 성공 후 항상 모순 없이 일관성 있는 DB 상태 보존

   3) Isolation (고립성) : 트랜잭션 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션 접근 불가

   4) Durability (영속성) : 성공이 완료된 트랜잭션의 결과는 영구(속)적으로 데이터베이스에 저장됨

 

2. 트랜잭션(Transaction)의 개념도, 상태변화

 2-1. 트랜잭션(Transaction)의 개념도

 

 2-2. 트랜잭션(Transaction)의 상태변화

  1) 활동 - 트랜잭션이 시작되어 연산들이 정상적으로 실행 중인 상태(Active State)  
  2) 부분완료 - 트랜잭션에 정의된 모든 연산의 실행이 끝난 상태(Partially Committed)
  3) 완료 - 트랜잭션의 성공적 종료 상태(Committed State)
  4) 실패 - 트랜잭션이 완료되지 못하고 더 이상 실행되지 못하는 상태(Failed State)
  5) 철회 - 트랜잭션이 실패한 후 실행되기 이전으로 복귀된 상태 (Aborted State)

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

1. 데이타무결성(integrity)의 개요

 1-1. 데이타무결성(integrity)의 정의

  - 데이터의 정확성, 유효성, 일관성, 신뢰성을 위해 무효갱신으로부터 데이터를 보호하는 개념

  - 데이터의 정확성과 일관성이 보장된 상태를 의미함

 

 1-2. 데이타무결성(integrity)의 필요성

  - 데이터의 정확성 확보로 신뢰할 수 있는 정보 제공
  - 데이터의 일관성 유지로 자료의 효율적 관리

 

2. 데이타무결성(integrity)의 개념도, 종류

 2-1. 데이타무결성(integrity)의 개념도

 

 2-2. 데이타무결성(integrity)의 종류

  1) 개체 무결성 (Entity)
   - 릴레이션의 기본키 속성은 절대 널값(Null Value)을 가질 수 없음
   - 기본키는 유일성을 보장해주는 최소한의 집합이어야 함
   - Primary Key , Unique index

 

  2) 참조 무결성 (Referential)
    - 외래키 값은 그 외래키가 기본키로 사용된 릴레이션의 기본키 값이거나 널(Null) 값이어야 함
    - 릴레이션의 외래키 속성은 참조할 수 없는 값을 가질 수
    - Foreign Key

 

  3) 속성(도메인) 무결성 (domain)
    - 릴레이션의 각 속성값들은 그 속성이 정의된 도메인에 속한 값이어야 함
    - 데이터의 속성, 기본값, Null 여부에 대한 제한
    - Check Constraints, Null/Not Null, Default, Rule

 

  4) 사용자 정의 무결성
    - 사용자의 비즈니스 요구에 따른 의미적 제한을 준수
    - 업무규칙 및 프로세스에 대한 데이터 규칙
    - Trigger, User Define Data Type

 

  5) 키 무결성 Key Integrity
    - 한 릴레이션에 같은 키 값을 가진 튜플들은 허용 안됨 (중복 배제)
    - Primary Key, Unique index

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,