안녕하세요. 엔지엠소프트웨어입니다. 오늘은 파이썬으로 간단하게 매크로를 만드는 방법에 대해 알아보도록 하겠습니다. 우선 Visual Studio Code를 실행하고, 새 파이썬 파일을 만듭니다. 저는 이전 글에서 이미 만든 test.py를 사용하도록 하겠습니다. 우선, 파이썬에서 마우스와 키보드를 제어할 수 있는 pyautogui를 설치해야 합니다. 마우스와 키보드 제어 기능뿐만 아니라 GUI에 관련된 모든 함수가 포함되어 있습니다. 이거 하나로 다 만들 수 있어요^^;

하단의 터미널에서 "pip install pyautogui"를 입력하여 설치하세요.

[ 1부 - 파이썬 개발 환경 만들기 ]

PS C:\Users\ngmas\Desktop> pip install pyautogui
Collecting pyautogui
  Downloading PyAutoGUI-0.9.52.tar.gz (55 kB)
     |████████████████████████████████| 55 kB 932 kB/s 
Collecting pymsgbox
  Downloading PyMsgBox-1.0.9.tar.gz (18 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting PyTweening>=1.0.1
  Downloading PyTweening-1.0.3.zip (15 kB)
Collecting pyscreeze>=0.1.21
  Downloading PyScreeze-0.1.26.tar.gz (23 kB)
Collecting pygetwindow>=0.0.5
  Downloading PyGetWindow-0.0.9.tar.gz (9.7 kB)
Collecting mouseinfo
  Downloading MouseInfo-0.1.3.tar.gz (10 kB)
Collecting pyrect
  Downloading PyRect-0.1.4.tar.gz (15 kB)
Collecting pyperclip
  Downloading pyperclip-1.8.1.tar.gz (20 kB)
Using legacy 'setup.py install' for pyautogui, since package 'wheel' is not installed.
Using legacy 'setup.py install' for PyTweening, since package 'wheel' is not installed.
Using legacy 'setup.py install' for pyscreeze, since package 'wheel' is not installed.
Using legacy 'setup.py install' for pygetwindow, since package 'wheel' is not installed.
Using legacy 'setup.py install' for mouseinfo, since package 'wheel' is not installed.
Using legacy 'setup.py install' for pyrect, since package 'wheel' is not installed.
Using legacy 'setup.py install' for pyperclip, since package 'wheel' is not installed.
Building wheels for collected packages: pymsgbox
  Building wheel for pymsgbox (PEP 517) ... done
  Created wheel for pymsgbox: filename=PyMsgBox-1.0.9-py3-none-any.whl size=7420 sha256=3427b8e556242b84692d8686335557bb3aab4ac96b979de00da97f53d4d98aa0
  Stored in directory: c:\users\ngmas\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local\pip\cache\wheels\7f\13\8c\584c519464297d9637f9cd29fd1dcdf55e2a2cab225c76a2db
Successfully built pymsgbox
Installing collected packages: pymsgbox, PyTweening, pyscreeze, pyrect, pygetwindow, pyperclip, mouseinfo, pyautogui
    Running setup.py install for PyTweening ... done
    Running setup.py install for pyscreeze ... done
    Running setup.py install for pyrect ... done
    Running setup.py install for pygetwindow ... done
    Running setup.py install for pyperclip ... done
    Running setup.py install for mouseinfo ... done
    Running setup.py install for pyautogui ... done
Successfully installed PyTweening-1.0.3 mouseinfo-0.1.3 pyautogui-0.9.52 pygetwindow-0.0.9 pymsgbox-1.0.9 pyperclip-1.8.1 pyrect-0.1.4 pyscreeze-0.1.26
WARNING: You are using pip version 20.2.3; however, version 20.3.3 is available.
You should consider upgrading via the 'C:\Users\ngmas\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\python.exe -m pip install --upgrade pip' command.
PS C:\Users\ngmas\Desktop>

 

설치가 완료되면, 몇가지 테스트를 해봅니다. 아래 코드를 입력하고, Ctrl+F5를 눌러서 모니터의 크기를 확인 해봅시다.

 
import pyautogui
screenWidth, screenHeight = pyautogui.size()
print('{0}, {1}'.format(screenWidth, screenHeight))

 

결과가 잘 나왔나요? 모니터의 해상도는 1920x1080입니다.

PS C:\Users\ngmas\Desktop>  c:; cd 'c:\Users\ngmas\Desktop'; & 'python' 'c:\Users\ngmas\.vscode\extensions\ms-python.python-2020.12.424452561\pythonFiles\lib\python\debugpy\launcher' '50754' '--' 'c:\Users\ngmas\Desktop\test.py'
1920, 1080
PS C:\Users\ngmas\Desktop>

 

마우스의 위치를 알아볼까요?

import pyautogui
mouseX, mouseY = pyautogui.position()
print('{0}, {1}'.format(mouseX, mouseY))

 

정상적으로 마우스의 좌표를 가져왔습니다. 마우스 위치가 X=723, Y=269네요^^;

PS C:\Users\ngmas\Desktop>  c:; cd 'c:\Users\ngmas\Desktop'; & 'python' 'c:\Users\ngmas\.vscode\extensions\ms-python.python-2020.12.424452561\pythonFiles\lib\python\debugpy\launcher' '50913' '--' 'c:\Users\ngmas\Desktop\test.py'
723, 269
PS C:\Users\ngmas\Desktop>

 

코드에 문제가 없는데도~ 아래와 같이 빨간줄이 그어질 수 있습니다.

 

 

pyautogui를 인식하지 못하는군요. 하지만, 실행은 잘 됩니다. VSC(Visual Studio Code)를 사용하면 많은 혜택(?)을 얻을 수 있습니다. 대표적인 기능으로 인텔리센스(자동 완성 기능)가 있죠. 대부분의 IDE가 제공하는 기능이긴하지만요. 아무튼, 상당히 좋은 기능임에도 불구하고 몇가지 버그가 존재합니다. 간혹 정상적인 코드에 빨간줄을 그어서 문제가 있는것처럼 표시합니다. 상당히 오래된 문제인데... 아직도 고쳐지지는 않았네요. 아무튼, VSC로 현존하는 대부분의 언어를 개발할 수 있다보니 캐어가 안되는 부분도 발생하는거 같아요. 그래서~ 사용자가 직접 처리할 수 있도록 해두었습니다.

  1. Ctrl+Shift+P
  2. Configure Language Specific 입력
  3. Python 입력

 

아래와 같이 settings.json 파일이 열립니다. 마지막에 python.jediEnabled:true를 추가해주세요. 그리고, VSC를 다시 실행합니다.

{
    "editor.suggestSelection": "first",
    "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
    "python.languageServer": "Jedi",
    "python.jediEnabled":"true"
}

 

드디어~ 빨간줄이 사라졌네요^^

 

 

이제 간단한 매크로를 하나 만들어 볼께요~ 이 매크로는 바탕화면의 내문서(소심비형), 내 PC, 네트워크, 휴지통을 1초 간격으로 클릭하는 동작을 수행합니다.

 

 

각각의 아이콘 위치를 알아내기 위해 엔지엠 에디터를 이용했습니다. 모니터 해상도가 1920x1080인 경우 각각의 위치는 아래와 같습니다.

  • 내문서(소심비형) : 34, 33
  • 내 PC : 43, 111
  • 네트워크 : 34, 193
  • 휴지통 : 36, 275

 

이 정보를 토대로 1초 간격으로 아이콘을 클릭하는 매크로를 만들어 볼께요. 아래 코드를 붙여넣기하고 Ctrl+F5를 눌러보세요.

import pyautogui
import time

time.sleep(1)
pyautogui.click(x=34, y=33)
time.sleep(1)
pyautogui.click(x=43, y=111)
time.sleep(1)
pyautogui.click(x=34, y=193)
time.sleep(1)
pyautogui.click(x=36, y=275)

 

1초 후 바탕화면의 아이콘을 순차적으로 클릭합니다.

 

 

막상 해보면~ 그리 어렵지는 않습니다. 누구나 쉽게 매크로를 만들 수 있죠^^; C, C++ C#, Java, Python을 비롯한 대부분의 언어들이 조금만 검색해보면 오픈되어 있는 소스가 많이 있습니다. 이런 소스들을 가져다가 내가 원하는 환경 및 기능으로 변경하여 사용할 수 있습니다. 처음에는 약간의 노력이 필요하겠지만 익숙해지면 누구나 1시간안에 간단한 기능들은 구현할 수 있을겁니다. 다음에는 엔지엠과 연동하는 방법에 대해 알아보도록 하겠습니다^^

 

 

출처 : http://ngmsoftware.com/bbs/board.php?bo_table=study&wr_id=241


이화식
- 대용량 데이터베이스솔루션


드라이빙 조건
 -  

2022.08.24

- 1.부분범위처리
- 실행계획에서  rows level 별로 내부 계획별 실행


- order by :드라이빙 역할시 인덱스 

- 힐클라이밍 알고리즘
http://wiki.hash.kr/index.php/%EC%96%B8%EB%8D%95_%EC%98%A4%EB%A5%B4%EA%B8%B0_%EA%B2%80%EC%83%89

- 인덱스 디센딩 힌트 실행계획



- 플랜에서 View : 내부적으로 임시 공간 


- 서브쿼리 내부 조건에서  Sort Unique 
https://karisma3s.tistory.com/entry/%EC%84%B1%EB%8A%A5%EA%B3%A0%EB%8F%84%ED%99%94-52-%EC%86%8C%ED%8A%B8%EB%A5%BC-%EB%B0%9C%EC%83%9D%EC%8B%9C%ED%82%A4%EB%8A%94-%EC%98%A4%ED%8D%BC%EB%A0%88%EC%9D%B4%EC%85%98


- 드라이빙이 누구냐?? 범위 중요 최대한 줄이는게 좋음
- 디센딩과 다를 경우 문제발생

- 19p 추가적으로 디센딩 조건을 드라이빙으로 넣는 순간 개선 (온라인 일때는 빠름 배치일때는 아닐수 있음)

- min/max 20p
where 1=2
일경우 nvl 처리 하더라도 값이 안나옴 fail

- sum등의 그룹함수를 쓸 경우 결과가 산출됨


-21p. 아웃루프, 인어루프 순서대로 실행계획 수립



- 쿼리블럭 - 머리 몸통 다리 (예를들면 인라인뷰)
-http://dbcafe.co.kr/wiki/index.php/Query_Block 쿼리블럭


- RDB 에서 로우넘이 생기는 경우 
- 쓰기 작업이 있을 경우 로우 넘이 생김



- 테이블 설계시에 세부 분야부터 생각하지말고 큰 틀 (집합)을 먼저 생각하고 설계


- 옵티마이저 단위 
- SQL 



-연결고리 상태

- 연결고리 정상

- 연결고리 이상
- 인덱스를 제대로 못타고 역주행

- ex) x.dept_cd (var) = y.dept_cd (num)
 - 인덱스 역주행
 

- 인계점 을 단계로 차이가 발생할 수 있음.

NESTED LOOP 일때는 야당에서 조건 필터해도 큰 변화가 없음


SORT MERGE 
- 반대로 소트 머지는 오히려 느려 질 수 있음
- 어느 순간 급 느려짐


HASH JOIN
-최근에는 대다수가 SORT MERGE 보다는 HASH JOIN 으로 가는경우가 많음
- DW의 케이스의 경우 데이터가 많기 대문에 해쉬조인 사용 일정 시간간격으로 증가



-RANDOM -> SORT -> HASH 


HASH
-f(x) = 값 (위치)해쉬 을 이용해서 가르킴



-해시 버킷 
https://www.databricks.com/kr/glossary/hash-buckets


-인메모리 해시 조인 

- http://wiki.gurubee.net/pages/viewpage.action?pageId=26740416 

-

- 소트 작업은 소트 에어리어 
- 해시 해시 에어리어

-버킷의 존재 여부를 비트맵벡터로 알수 있음


-In -Memory Hash JOIN
- 가장 빠른 해쉬 조인

- 메모리 내에 해쉬 테이블을 만들어서 찾는 방식
- 작은 단위의 메모리 일수록 찾기 쉬워짐


위 해쉬 조인이 안되는 경우 [ex)DW]


-On-Disk Hash Join(Grace)
-partition pair에서
-partition duo를


하둡 - 해쉬조인




- 옵티마이징 수행절차
-컴파일 방식이아니고 텍스트를 인식해서 실행
-파서(사전) 문장을 해석



-view merging

-mview 물리적 데이터를 생성
-https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=musicovery12&logNo=220232911776

-

2022.08.25


- 4. 실행계획의 해석

- 실행계획 순서
-안에서 밖으로 실행됨


- 해쉬조인 안에 인메모리 

- INLIST <- IN() 에 들어가있는 값 만큼 반복

-하향식 (Top-Down) 방식

-DFS 깊이우선


-BFS 너비우선

-상향식 (Bottom-Up) 방식




- elapsed 타입이 오래걸릴경우
- 대기 타임이 오래 걸릴수 있음
- io 가 많을 경우에도 웨이팅 될 수 있음



- partitioning 전략
-

- 옵티마이저 모드
  - 모드부터 설정되있어야함
  - ALL_ROWS, FISRT_ROWS, CHOOSE, RULE   
 - https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rnarnsms73&logNo=40152252489
 - http://ojc.asia/bbs/board.php?bo_table=LecOrccleTun&wr_id=80


- OLTP : FIRST_ROWS

- DW : ALL_ROWS

- 통계정보 옵티마이저의 COST 
 - 참고 : https://blog.sengwoolee.dev/88
 


WHERE 문장
- 드라이빙
- 필터
- 인덱스 사용불가로 인한 비효율적 원인

- FBI 펑션 베이스 인덱스
 - http://wiki.gurubee.net/pages/viewpage.action?pageId=1507454
 
- NULL은 인덱스를 찾아갈수 없음

- 비트맵인덱스의 경우 NULL을 인덱스로 사용가능

- 날짜나 짜른거 인덱스를 꼭 태워야하면 FUNCTION BASE INDEX로 사용



- 인덱스 미사용
 -88P,~90P 
 
 
- SKIP_SCAN 힌트에 
- 마땅 한 인덱스를 못탈 때 COL1+ COL2 합쳐서 가있을때 인덱스를 태우는 방법
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=weekamp&logNo=221600846268


- index skip scan 인덱스 전부 스캔하지 않고 SKIP해서 스캔하는 엑세스 방법


- /*+ INDEX_SS(table index) */


Filtering 인덱스 미사용
- 드라이빙 종류가 만들어져야 됨응로 어중간한 드라이빙 케이스 만들지말것

-  안좋은 케이스
chuldate like :chuldate || '%'
and custno like :chuldate || '%'


- 정 안될 경우 union 하면서 각 조건에 like


클러스터링 펙터
- 물리적 디스크파일에서 데이터가 모여있는 정도를 나타낸다.
https://velog.io/@kw78999/DB-Clustering-Fector



인덱스나 힌트를 사용할 시에 손익분기점을 계산해여 cost 산출하면서 사용여부 확인


A B C

(=  = like) <-드라이빙 


(= LIKE)<-드라이빙 =

(LIKE) =  =


- 인덱스 종류 https://myjamong.tistory.com/237


-http://ojc.asia/bbs/board.php?bo_table=LecOrccleTun&wr_id=102

오라클 규칙 기반 옵티마이저(RBO, Rule-Based Optimizer)
최근에는 거의 사용되지 않는다.
오라클이 규칙 기반 옵티마이저로 동작하는 경우는 initSID.ora 파일에 
OPTIMIZER_MODE=RULE or OPTIMIZER_MODE=CHOOSE 이면서 테이블이나 인덱스에 대한 통계 정보가 없는 경우
(11g이후 CBO로 동작) 인데 
DW(Data WareHouse)에서는 비용 기반 옵티마이저(Cost-Based Optimizer)가 
파티션테이블, 구체화 뷰 등을 지원하므로 규칙기반 보다는 비용 기반 옵티마이저가 더 효율적 입니다





- 99p join의 효율화 **

- 제공자역할(서브쿼리)의 경우 1의 건수가 되어야하며
- 확인자 역할을 N건의 데이터가 될수 있다



- cost 베이스로 가는데 통계정보가 없을 경우에 실행계획이 엉망일 수 있음



- 부분범위처리일 경우


- Join Cost 를 감속하기 위해서는
- or를 사용하지않고
스칼라 서브쿼리, hash 나 sort 를 이용하여서 조인 방법으로 선택

- 내부 테이블 조건에서 드라이빙 테이블의 cost를 감소화 시키는경우가 좋음 103p


- 실행계획 확인 방법 XPLAN, AutoTrace, SQL Trace
https://myjamong.tistory.com/236


 - Execute, Fetch Call 발생 유형 
https://m.blog.naver.com/bkbspark0725/222034230005
01 Call 통계
1) Parse Call   : 커서를 파싱하는 과정( 실행계획을 생성하거나, 찾는 과정 )을 수행한 횟수
2) Execute Call : 커서를 실행하는 과정을 수행한 횟수
3) Fetch Call   : select문에서 실제 레코드를 읽어 사용자가 요구한 결과집합을 출력한 횟수

# select 문일 때 Execute Call 단계에서는 커서만 오픈하고, 실제 데이터를 처리하는 과정은 
  모두 Fetch 단계에서 일어난다.
# group by 문장은 Fetch 지점에서 처리가 일어남


- 세미조인 


- unnesting
- 종속관계인 메인과 서브쿼리를 동격관계 로 최적화
- 데이터량이많을 경우 선처리 후 서브쿼리로 조건 추가 가능

- unnest
- 계급장 때자

- no_unnest
- 계급장 인증 후 처리

-확인하기
- http://wiki.gurubee.net/pages/viewpage.action?pageId=26741721

- filter

- nested



- /*+ unnest */  무조건 서브쿼리를 먼저 돌리는 형식이아니고 계급장을 때고 판단하는 것



- copy_t

https://dev4u.tistory.com/132 copy_t



-오라클 메모리(Shared Pool)

https://1duffy.tistory.com/19



- 오라클 아우트라인 outline data
- 컨닝 페이퍼
https://bae9086.tistory.com/381
- 버전이 바뀔경우 이전 버전으로 튜닝기준 설정



2022.08.26

- SQL 수행 성능 분석

- Trace 파일 출력 및 분석



- Array Processing 활용
-http://wiki.gurubee.net/pages/viewpage.action?pageId=26279996


- 모든 I/O 단위는 블록단위 

- block 단위에서 메모리 상태에서 문제가 발생할 시에 redo log로 롤백을 한다!


- snapshot too old  : batch 잡 을 실행할 때 오래된 시점의 데이터가 사라지면서 나타나는 현상
-https://atoz-develop.tistory.com/entry/Oracle-ORA-01555-Snapshot-too-old-%EC%97%90%EB%9F%AC-%EC%9B%90%EC%9D%B8%EA%B3%BC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95

- 먼저 ORA-01555가 발생할 수 있는 시나리오의 예를 타임라인을 통해 보겠습니다. UNDO 세그먼트, 일관적인 읽기 등의 용어에 대해 익숙치 않은 경우에도 우선 다음 내용을 읽어보시길 바랍니다.

- 튜닝 할 수 있음

- 주의 loop 안에 널고 commit을 찍을 경우 블락 카피가 훨씬 더 많이 생길 수 있음


- disk 

- [Oracle] SQL 실행 계획 확인 방법 2편 (SQL Trace, TKPROF)
https://estenpark.tistory.com/303



- SCN (시스템 커밋 넘버)

- Consistent Mode
https://myjamong.tistory.com/195



- Overall Total 분석대상 (전체적인 문제점 분석)
- OVERALL TOTALS 값을 통해 진단 대상시스템의 SQL 성능 및 활용 정도를 추정 할 수 있음

1 SQL당 수행시간
- total cpu / execute count (2 % 1) [0.01초 이내]
- total elapsed / execute count (3 % 1) [0.03초 이내]

- Parse Overhead

- Execute vs Fetch
- decrare 부분을 많이 사용하였는 지 loop 부분에서 많이작업햇는지 확인 옵티마이징 전략분석

- 스캔 방식은 멀티블락방식

- 인덱스 스캔방식은 원블락

- 스캔방식은 8블락

- 랜덤일 경우 낫개의 블락을 수행

- Db 특성상 커밋이 안된 상황에도 디스크에 들어가게끔 작업해서 저장하는 방식 만약 취소될 시에는 rollback 처리



- parse -> Execute -> fetch
  (구문분석)  (실행)  

-https://notemusic.tistory.com/17


- 악성 SQL의 분포 추정
 - TKPROF utility 에 의해 처음 생성된 파일의 크기와 Full scan 및 cpu time 에 의해 추출된결과파일의 크기를 비교하여 전체 SQL 대비 악성 SQL의 비율을 추정할 수 있음
 - http://www.gurubee.net/lecture/1842
 

- RDB는 포크레인에 비유 (모아서 한번에 처리방식)

- Index 최적화
 - 

 - 테이블이 사용하고있는 ACCESS PATH 유형 분석부터 해야함


- Access Path 
- 데이터베이스에 저장된 데이터에 접근(액세스)하는 방법 또는 경로
-


-FULL TABLE SCAN
-ROWID SCAN
-INDEX SCAN
-CLUSTER SCAN
-공단(공간의 모임) 을 만들어서 스캔하는 방식 
 공단(쉽게 말해서 공장 부지)
 
-EXTENT 증설 시키는 개념

- 멀티 테이블 클러스터링
- 클러스터링 테이블
https://ybhoon.tistory.com/entry/13-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81-%ED%85%8C%EC%9D%B4%EB%B8%94
-저장을 할때는 COST 가 발생하지만 ACCESS 할때는 효율적임

-SCAN 방식 (RANDOM 방식이 아님) 이 효율적

-클러스트 인덱스는 한클러스 당 인덱스 하나




-HASH SCAN
- h(x) = 위치 값으로 같은 해쉬값을 갖는 모두 로우가 동일한 데이터 블록에 저장

- 인덱스가 없음 (같은 종목 모임)


- 인덱스의 구조가 잘못 설계되있는 경우
- 비효율적으로 많은 인덱스는 옵티마이저를 헷깔리게만들고 데이터 액세스량이 증설된다.


- 전략적으로 여당, 야당조건을 잘 판단하여서 적용 주류,비주류 분류 해서 사용


- Concatenation plan 실행계획 분기
https://mentor75.tistory.com/entry/%EC%8B%A4%ED%96%89%EA%B3%84%ED%9A%8D-SQL-%EC%97%B0%EC%82%B0CONCATENATION

- 몇개를 잘라서 하나의 분기로 만든다


- Range scan : Skip scan 
-http://wiki.gurubee.net/display/DBSTUDY/Index+Skip+Scan



- 스타 조인 형제들끼리 기준테이블을 이용하여 조인하는 방식
- http://wiki.gurubee.net/pages/viewpage.action?pageId=14221327

- 한 테이블을 기준으로 다른 테이블들을 조인하는 방식

- skip scan에서 cardinality 영향도로

- /*+ index_ss(x index4) */ 방식을 이용하여서 스킵스캔 방식 이용가능



- 인덱스 설계 기준 
- 1. 항상 사용하는가?

2. 항상 '='로 사용하는가?

3. 어느 것이 분포도가 더 좋은가?
-Cardinality 종류

4. 자주 정렬되는 순서는?
- 부분범위 처리

5. 같이 자주 사용되고 있는가?
- 후보선수 선정


- 인덱스 최적화 절차
1. 프로그램에서 사용하고있는 모든 SQL 추출

2. 테이블 단위로 추출된 SQL을 근거로 Access 유형
-(패턴 Ex) like, and 등 중에서 영향을 줄수 있는 부분만 정리) 분석

3.  모든 Accress 유형을 만족할 수 있는 인덱스 생성
- 유형별 커멘트를 달아서 해결책 마련

4. 수립된 인덱스를 근거로 옵티마이저의 실행 계획 확인
- 유형별 확인

5. 수립된 인덱스를 잘못 사용하는 SQL문에 대한 실행계획제어를 위해 SQL 변경
- 선천성 불구를 만들지말라!


- 원리를 알고 이해하기


- 배치 프로세싱 형태

- 배치 처리를 위한 가이드

- 절차형 SQL의 개선 : 가능하면  CURSOR SQL에서 모든 처리가 이루어지도록
- 미,적분(?) sql
- 초대량의 테이블을 처리할 때는 partitioning 
- 파티션 처리 필수
- 파티션을 뭘로 짜를지 중요
- partition pruning 파티션 프루닝
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tpgpfkwkem0&logNo=220616572811

- parallel 사용검토 (SQL parallel, Program Parallel)

- temp table 사용

- 병렬처리 실행계획 학습해보기

- 다중처리(Array Processing)나 Merge 문 사용

- 대량의 DML 처리를 위한 동적 환경 제어 : 처리 대상 건수 파악이 중요


-병렬,시리얼(?) 실행계획

- 대량 데이터는 항상 hash join!

- merge 를 이용해서 배치 프로그램 짜는 경우가 좋음

- group filter







그외 참고사이트


-이화식선생님 온라인 스터디 자료
http://bysql.net/d200907/56










 

Blob(블랍) 이해하기 

 

heropy.blog/2019/02/28/blob/

 

Blob(블랍) 이해하기

JavaScript에서 Blob(Binary Large Object, 블랍)은 이미지, 사운드, 비디오와 같은 멀티미디어 데이터를 다룰 때 사용할 수 있습니다. 대개 데이터의 크기(Byte) 및 MIME 타입을 알아내거나, 데이터를 송수신�

heropy.blog

 

'Script > JavaScript' 카테고리의 다른 글

css 활용방법  (0) 2016.12.28

+ Recent posts