분류 전체보기 262

MySQL 실행 계획

MySQL 통계 정보 이용하기 1. 히스토그램 8.0 이상 버전 부터 사용할 수 있는 통계 정보. 쿼리의 실행 계획을 세우는데 도움을 준다. 컬럼 단위로 수집되며 ANALYZE TABLE ... UPDATE HISTOGRAM 명령을 실행해 수동으로 수집 및 관리된다. 예시) ANALYZE TABLE employees.employees UPDATE HISTOGRAM ON gender, hire_date; SELECT * FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME='employees' AND TABLE_NAME='employees'; gender 컬럼에 생성된 히스토그램 내용 {"buckets": [[1, 0.6000515237677232], ..

DB/MySQL 2022.06.12

Java 스레드

Java에서 쓰레드를 생성하는 방법 1. Runnable 인터페이스를 구현한 객체를 Thread 객체 생성자로 전달한다. private void ExampleThread() { class Task implements Runnable { @Override public void run() { } } Thread t1 = new Thread(new Task()); t1.start(); Thread t2 = new Thread(new Runnable() { @Override public void run() { } }); t2.start(); } - 인터페이스 객체는 run()이라는 메서드를 구현하고 실제 바탕 작업을 의미한다. - Runnable 인터페이스를 상속하는 익명 클래스를 전달한다. start()는 스..

언어 지식/Java 2022.06.08

(6) Pthread 쓰레드 / PMutex 뮤텍스

Pthread 사용하기 gcc -pthread thread_example.c -o thread_example.o -pthread 플래그로 링크해야한다. 스레드 생성하기 #include int pthread_create(pthread_t* thread, const pthread_attr_t *attr, void* (*start_routine) (void*), void* arg); thread : 생성된 스레드 ID를 반환 attr : 새로 생성할 스레드의 속성을 지정 start_routine : 스레드가 수행할 함수 arg : 수행할 함수에 전달될 인자 스레드 종료 및 취소 void pthread_exit(void* retval); int pthread_cancel(pthread_t thread); 스레드..

C++/linux 2022.05.12

(5) 프로세스 관리

프로세스 실행 중인 프로그램을 지칭. 메모리에 적재된 바이너리 이미지, 가상화된 메모리 인스턴스, 열린 파일, 커널 리소스, 사용자 정보, 하나 이상의 스레드를 포함한다. 프로세스 ID 프로세스 ID(pid)는 유일한 식별자로 구분된다. 커널이 실행하는 idle 프로세스의 pid는 0이다. 시스템 부팅이 끝나면 커널이 실행하는 최초의 프로세스 init 프로세스의 pid는 1이다. init 프로세스 init 프로세스는 다음 순서대로 경로에서 찾아 먼저 찾은 프로세스를 실행한다. /sbin/init : 가장 먼저 찾는 init 프로세스 /etc/init : 두번째로 찾는 init 프로세스 /bin/init : 우선 탐색에 실패했을 때 찾는 init 프로세스 /bin/sh : 커널이 앞의 순서댈 init 프로..

C++/linux 2022.05.11

(4) 고급 입출력 readv/writev/epoll/mmap

벡터 입출력 한 번의 호출로 배열 형태의 입출력용 자료구조에 데이터를 한 번에 읽고 쓰는 것이 가능하다. 벡터 입출력 readv(), writev() #include ssize_t readv (int fd, const struct iovec *iov, int count); ssize_t writev (int fd, const struct iovec *iov, int count); 파일 디스크립터 fd로 부터 입출력용 자료구조 iovec에 데이터를 읽어드리는 readv() 그리고 iovec의 데이터를 한 번에 쓰는 writev 함수가 있다. 호출이 성공했을 시 읽거나 쓴 바이트 수를 반환한다. 에러가 발생했을 시 -1을 반환. 벡터 입출력용 자료구조 iovec iovec* 은 결국 여러 버퍼의 시작 주소와..

C++/linux 2022.05.10

(3) 버퍼 입출력

파일 포인터 FILE* (파일 스트림)로 표준 입출력 하기 파일 열기 fopen() FILE* fopen(const char* path, const char* mode); 모드 mode "r" : 읽기 모드 "w" : 쓰기 모드 "a" : 덧붙이기 모드 "r+", "w+", "a+": 읽기/쓰기 모드 모두 지원 성공 시 유효한 파일 포인터 반환, 실패 시 NULL을 반환. 파일 디스크립터를 통해 스트림 만들기 fdopen() FILE* fdopen (int fd, const char* mode); 반환된 파일 스트림은 파일 디스크립터와 연결된 입출력을 제공한다. 파일 스트림을 닫으면 파일 디스크립터도 닫힌다. 스트림 닫기 fclose() int fclose (FILE* stream); 성공 시 0, 실패..

C++/linux 2022.05.10

(2) 다중 입출력 select와 poll

다중화된 입출력 파일 디스크립터에서 발생하는 입출력 이벤트를 확인하는 방법에 대해 알아본다. 동기화된 다중 입출력 메커니즘 select() #include int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); n : 감시하는 파일 디스크립터 중 가장 큰 것에 +1을 한 값 readfds : 읽기를 감시하는 파일 디스크립터 집합 writefds : 쓰기를 감시하는 파일 디스크립터 집합 exceptfds : 예외가 발생하는 지 감시하는 파일 디스크립터 집합 (주로 소켓) timeout : 타임 아웃 시간 성공 시 입출력이 준비된 fd 개수를 반환한다. 타임 아웃시 0을 반환, 에러 시 ..

C++/linux 2022.05.10

(1) errno와 파일 입출력

리눅스 운영체제에서 사용되는 시스템 함수는 에러가 발생했을 시 헤더에 정의된 전역 변수에 에러코드가 저장된다. extern int errno; 에러 코드에 대한 에러 메시지를 편하게 출력하기 위한 방법은 다음과 같다. #include void perror (const char* str); // ex if (open("file.txt", O_RDONLY) == -1) { perror("open failed."); } 파일 열기 open() #include #include #include int open (const char* name, int flags); int open (const char* name, int flags, mode_t mode); flags 인자 : O_RDONLY, O_WRONLY, ..

C++/linux 2022.05.10

VirtualBox에서 인터넷 사이트 DNS 접속 오류

버츄얼 박스에서 Ubuntu를 설치한 뒤 인터넷을 사용할 때, 일부 사이트 접속이 되지 않는 문제 파이어 폭스 혹은 크롬을 통해 인터넷 연결 및 검색은 되지만 사이트의 url 연결시 접속이 안되는 문제가 있다. resolvconf 설치 sudo apt-get install resolvconf /etc/resolvconf/resolv.conf.d/head 파일 수정 // cd /etc/resolvconf/resolv.conf.d -> head 파일을 수정 sudo nano /etc/resolvconf/resolv.conf.d/head 맨 아래에 nameserver "참조할 dns 서버 주소" 추가하고 저장 내 dns 서버 주소는 윈도우 cmd창에서 nslookup으로 확인 버츄얼 박스 재부팅후 사이트 접속

MySQL 옵티마이저와 힌트

옵티마이저 쿼리를 실행하기전 어떻게 실행할 것인지, 최적의 실행 계획을 만들기 위한 논리를 만드는 역할 쿼리 실행 절차 1. 사용자의 SQL 문장를 MySQL 서버가 이해할 수 있는 수준으로 분리한다. 2. 분리된 파스 트리 정보를 보고 어떤 테이블, 인덱스를 읽을 것인지 확인한다. 3. 결정된 테이블 읽기 순서나 대상 인덱스를 사용하여 데이터를 읽는다. - 파스 트리 정보으로부터 결정하는 것 불필요한 조건 제거, 복잡한 연산 단순화, 읽는 테이블 순서 결정, 인덱스 통계 정보를 이용하여 인덱스 결정, 레코드를 임시 테이블을 만들어 다시 가공해야하는 지 결정 등. 기본 데이터 처리 - 풀 테이블 스캔 인덱스를 사용하지 않고 전체 데이터를 처음부터 끝까지 읽어 요청된 작업을 처리하는 것 1. 레코드 건 수..

DB/MySQL 2022.05.08