MySQL Session Lock 관리 스크립트


1. MySQL Session 조회

SELECT   a.*

FROM    INFORMATION_SCHEMA.PROCESSLIST A

WHERE   1            =    1

AND     A.COMMAND     NOT IN ('Binlog Dump','Sleep')

#AND        A.DB         IN    ('ssgaddb') # real

;


2. MySQL Metadata LOCK 조회

: 메타 정보 잠금 MySQL 5.5.3 이후 추가된 새로운 유형의 잠금으로 DDL문에 대한 잠금

SELECT OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, LOCK_TYPE, LOCK_STATUS,

       THREAD_ID, PROCESSLIST_ID, PROCESSLIST_INFO

FROM performance_schema.metadata_locks

    INNER JOIN performance_schema.threads ON THREAD_ID = OWNER_THREAD_ID

WHERE PROCESSLIST_ID <> CONNECTION_ID();


2. MySQL LOCK 조회

: 일반적인 잠금은 객체에 대한 읽기나 쓰기에 대한 잠금

select * from information_schema.INNODB_LOCK_WAITS;

--테이블은 아직 LOCK을 얻지 못하고 기다리고 있는 트렌젝션을 관리

--테이블이 Lock당한 프로세스를 조회


select * FROM information_schema.INNODB_LOCKS;

--Lock을 건 프로세스를 조회


select * FROM information_schema.INNODB_TRX;

--오랜 시간 동안 Commit 되지 않은 트렌젝션을 보려면 이 테이블을 보면 확인 가능



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

MySQL 테이블/인덱스 사이즈 조회 스크립트



1. DB LEVEL 사이즈 조회

SELECT

COUNT(*) NUM_OF_TABLE

   , TABLE_SCHEMA,CONCAT(ROUND(SUM(TABLE_ROWS)/1000000,2),'M') ROWS

   , CONCAT(ROUND(SUM(DATA_LENGTH)/(1024*1024*1024),2),'G') DATA

   , CONCAT(ROUND(SUM(INDEX_LENGTH)/(1024*1024*1024),2),'G') IDX

   , CONCAT(ROUND(SUM(DATA_LENGTH+INDEX_LENGTH)/(1024*1024*1024),2),'G') TOTAL_SIZE

   , ROUND(SUM(INDEX_LENGTH)/SUM(DATA_LENGTH),2) IDXFRAC

FROM     INFORMATION_SCHEMA.TABLES

GROUP BY

TABLE_SCHEMA

ORDER BY

SUM(DATA_LENGTH+INDEX_LENGTH) DESC LIMIT 10;


2. TABLE LEVEL 사이즈 조회

SELECT TABLE_NAME,

       ROUND(DATA_LENGTH/(1024*1024),2) AS 'TABLE SIZE(MB)',

       ROUND(INDEX_LENGTH/(1024*1024),2) AS 'INDEX SIZE(MB)'

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA = 'TESTDB'

GROUP BY TABLE_NAME, DATA_LENGTH, INDEX_LENGTH;


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

PostgreSQL 10, Export/Import



1.PostgreSQL Export


 1-1. META ONLY

   - pg_dump -U TEST -E UTF8 -s -v -f /pg_backup/TESTDB_schema_`date "+%Y%m%d%H%M%S"`.dmp  TESTDB 2> /pg_backup/TESTDB_schema_`date "+%Y%m%d%H%M%S"`.log


 1-2. DATA ONLY

   - pg_dump -U TEST -E UTF8 -a -v -f /pg_backup/TESTDB_dataonly_`date "+%Y%m%d%H%M%S"`.dmp  TESTDB 2> /pg_backup/TESTDB_dataonly_`date "+%Y%m%d%H%M%S"`.log


 1-3. 주요사용 옵션(대소문자 주의) 

1. -U username

2. -d dbname

3. -W password / -w no password

4. -a data only

5. -E encoding

6. -f file

7. -s schema only

8. -t table : include table

9. -T talbe : exclude table

10. --help


2. DB 및 계정 RENAME

- TEST_201903.dmp 파일 안에 TEST 단어를 TESTDB로 치환

- find . -name "TESTDB_dataonly_201903.dmp" -exec perl -pi -e 's/TEST/TESTDB/g' {} \;

- find . -name "TESTDB_schema_201903.dmp" -exec perl -pi -e 's/TEST/TESTDB/g' {} \;


3. PostgreSQL Import

psql -d TESTDB -U TESTDB -f /pg_backup/TESTDB_schema_201903.dmp

psql -d TESTDB -U TESTDB -f /pg_backup/TESTDB_dataonly_201903.dmp


상세 옵션: https://www.postgresql.org/docs/10/app-pgdump.html


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

PostgreSQL Object 접근 권한 조회 스크립트


SELECT n.nspname as "Schema",

  c.relname as "Name",

  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'foreign table' END as "Type",

  pg_catalog.array_to_string(c.relacl, E'\n') AS "Access privileges",

  pg_catalog.array_to_string(ARRAY(

    SELECT attname || E':\n  ' || pg_catalog.array_to_string(attacl, E'\n  ')

    FROM pg_catalog.pg_attribute a

    WHERE attrelid = c.oid AND NOT attisdropped AND attacl IS NOT NULL

  ), E'\n') AS "Column privileges",

  pg_catalog.array_to_string(ARRAY(

    SELECT polname

    || CASE WHEN polcmd != '*' THEN

           E' (' || polcmd || E'):'

       ELSE E':' 

       END

    || CASE WHEN polqual IS NOT NULL THEN

           E'\n  (u): ' || pg_catalog.pg_get_expr(polqual, polrelid)

       ELSE E''

       END

    || CASE WHEN polwithcheck IS NOT NULL THEN

           E'\n  (c): ' || pg_catalog.pg_get_expr(polwithcheck, polrelid)

       ELSE E''

       END    || CASE WHEN polroles <> '{0}' THEN

           E'\n  to: ' || pg_catalog.array_to_string(

               ARRAY(

                   SELECT rolname

                   FROM pg_catalog.pg_roles

                   WHERE oid = ANY (polroles)

                   ORDER BY 1

               ), E', ')

       ELSE E''

       END

    FROM pg_catalog.pg_policy pol

    WHERE polrelid = c.oid), E'\n')

    AS "Policies"

FROM pg_catalog.pg_class c

     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace

WHERE c.relkind IN ('r', 'v', 'm', 'S', 'f')

  AND n.nspname !~ '^pg_' AND pg_catalog.pg_table_is_visible(c.oid)

ORDER BY 1, 2;



블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

PostgreSQL Vacuum 수행 필요 대상 추출 스크립트



- Vacuum threshold(autovacuum 임계값) = vacuum base threshold + vacuum scale factor * number of tuples


WITH avt AS (

    SELECT 

            setting AS autovacuum_vacuum_threshold 

    FROM    pg_settings 

    WHERE   name = 'autovacuum_vacuum_threshold'

)

, vsf AS (

    SELECT  setting AS autovacuum_vacuum_scale_factor 

    FROM    pg_settings 

    WHERE   name = 'autovacuum_vacuum_scale_factor'

)

, fma AS (

    SELECT  setting AS autovacuum_freeze_max_age 

    FROM    pg_settings 

    WHERE   name = 'autovacuum_freeze_max_age'

)

, sto AS (

    select  opt_oid

          , split_part(setting, '=', 1) as param

          , split_part(setting, '=', 2) as value 

    from    (

                select 

                        oid opt_oid

                      , unnest(reloptions) setting 

                from    pg_class

            ) opt

)

SELECT  '"'||ns.nspname||'"."'||c.relname||'"' as relation

      , pg_size_pretty(pg_table_size(c.oid)) as table_size

      , age(relfrozenxid) as xid_age

      , coalesce(cfma.value::float, autovacuum_freeze_max_age::float) as autovacuum_freeze_max_age

      , (coalesce(cavt.value::float, autovacuum_vacuum_threshold::float) + coalesce(cvsf.value::float,autovacuum_vacuum_scale_factor::float) * c.reltuples) as autovacuum_vacuum_tuples

      , n_dead_tup as dead_tuples

FROM    pg_class c 

        join pg_namespace ns 

        on  ns.oid = c.relnamespace

        join pg_stat_all_tables stat 

        on  stat.relid = c.oid

        join avt 

        on (1=1) join vsf 

        on (1=1) join fma 

        on (1=1)

        left join sto cavt 

        on cavt.param = 'autovacuum_vacuum_threshold' 

        and c.oid = cavt.opt_oid

        left join sto cvsf 

        on cvsf.param = 'autovacuum_vacuum_scale_factor' 

        and c.oid = cvsf.opt_oid

        left join sto cfma 

        on cfma.param = 'autovacuum_freeze_max_age' 

        and c.oid = cfma.opt_oid

WHERE   c.relkind = 'r' and nspname <> 'pg_catalog'

and     (

            age(relfrozenxid) >= coalesce(cfma.value::float, autovacuum_freeze_max_age::float)

            or

            coalesce(cavt.value::float, autovacuum_vacuum_threshold::float) + coalesce(cvsf.value::float,autovacuum_vacuum_scale_factor::float) * c.reltuples <= n_dead_tup

        )

ORDER BY age(relfrozenxid) DESC;


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

Oracle TEMP / UNDO 재생성 스크립트



1. Temp tablespace 대체하기

*Temp tablespace가 100% 일시 테이블 스페이스를 재성성 하는 방법

*주의사항 Temp tablespace를 생성할 저장공간이 없다면 불가능한 방법임


예시)


1) 생성

CREATE TEMPORARY TABLESPACE "TEMP_1" TEMPFILE

'/ora_data/temp01_1.dbf' SIZE 1024M AUTOEXTEND OFF,

'/ora_data/temp02_1.dbf' SIZE 1024M AUTOEXTEND OFF,

'/ora_data/temp03_1.dbf' SIZE 4096M AUTOEXTEND OFF

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;


2) 변경

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP_1


3) 삭제

DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;


2. UNDO tablespace 대체하기


1) 생성

CREATE UNDO TABLESPACE "UNDOTBS1_1" DATAFILE

'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ASITSNT\UNDOTBS01_1.DBF' SIZE 20480M AUTOEXTEND OFF

EXTENT MANAGEMENT LOCAL AUTOALLOCATE;


2) 변경

ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS1_1;


3) 삭제

DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

6 sigma (무결점 수준의 결함을 통한 고객만족의 극대화)



1. 6 sigma의 개요

 1-1. 정의

   - 고객의 관점에서 문제를 정의하고 통계적, 체계적 기법으로 측정, 분석하여 무결점 수준의 품질개선을 통해 성과를 극대화하는 경영혁신 활동


  1-2. 특징

    - 기업문화 혁신 : 현업주도의 모든 조직원의 공감과 참여, 지속적 개선

    - 전사적 프로세스 혁신 : Top-Down 방식, 경영성과의 평균/편차 동시 개선

    - 과학적 기법 : 통계적 기법 동원, 정량적으로 프로세스 개선 평가수행

    - 고객만족도 향상 : Big Y기반의 CTQ의 품질 향상


2. 6 sigma의 개념도 및 방법론

 2-1. sigma의 개념도


 2-2. 6 sigma의 방법론

  1) DMAIC : 요구관련 근원 원인에 개선 집중(제조분야)

  2) DFSS : CTQ의 달성을 위한 신규 설계 최적화 집중(R&D분야)

  3) DMADV : 요구관련 근본 Process 원인의 재설계 집중(영업/마케팅분야)


3. 6 sigma 수행의 성공요소

  - 인적측면 : 최고경영자의 통솔력, 참여직원들의 교육훈련, 충분한 이해

  - 지원측면 : 추진 Belt조직의 전문가이드, 지표측정의 기술적 도구 지원

  - 방향측면 : 고객의 Needs를 정확히 분석한 Big Y기반의 CTQ 파악


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

캐즘이론 (Chasm)



 1. 캐즘이론 (Chasm)의 개요

  1-1. 정의

    - 첨단 제품의 기술 수용시기를 바탕으로 제품이 확산되는 과정에서 초기시장에서 주류시장으로 넘어가는 지점에 신제품 확산이 실패하거나 일시적인 판매정체 현상이 일어나는 저항이 발생되는 현상을 말하며 이를 극복하기 위한 전략이 필요하다는 이론


  1-2. 특징

    - 기술수용주기 세분화 : 초기시장, 주류시장, 말기시장

    - 진행사항에 따른 고객 분류 : 혁신수용자, 선각수용자, 전기다수, 후기다수, 지각 수용자

    - 캐즘 극복전략 단계 : 디데이전략, 공격포인트 선택, 특공대결성, 전투와 경쟁 대상 정의 공격 개시

    - 신기술 마케팅 전략활용 


 2. 캐즘이론 (Chasm)의 마켓 모델 및 세부 설명

   2-1. 캐즘이론 (Chasm)의 마켓 모델


  2-2. 캐즘이론 (Chasm)의 세부 설명

    - 캐즘이론의 소비자 유형 분석 (스마트폰 출시기준)

     1) 혁신자계층 : 스마트폰을 처음 출시 시, 바로 구매계층 (기술애호가)

     2) 선각수용자 : 스마트폰이 가지는 잠재적 이익과 응용성을 판단(보편성 중심)

     3) 전기다수계층 : 스마트폰이 피쳐폰 보다 실리적 이익이 눈에 보일 때 구매하는 계층 (실용적인 구매 성향)

     4) 후기다수계층 : 스마트폰이 피처폰보다 월등히 많아 지고 피처폰의 기능이 부족하다고 느껴질 때 구매 (보수적 계층, 표준선호자)

     5) 지각수용자 : 캐즘이론과 무관한 마케팅 노력이 필요하지 않은 계층(구제불능 계층)


 2-3. 캐즘이론 (Chasm)의 극복 전략

  1) 세분시장을 선택

  2) 완전 완비제품을 만들 것

  3) 집중 공략 

  4) 든든한 거점을 확보

  5) 구전효과의 연쇄반응을 노림

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,