Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL SLEEP() 함수는 바쁜 대기(Busy-Wait)일까? 구현 방법 완벽 정리

MySQL SLEEP() 함수는 바쁜 대기(Busy-Wait) 방식인가?

결론부터 말하면 아니요, MySQL의 SLEEP() 함수는 바쁜 대기(busy-wait) 방식으로 동작하지 않습니다. SLEEP() 함수는 지정한 시간(초 단위) 동안 해당 쿼리의 실행을 일시 정지시키는 함수로, CPU를 계속 점유하는 방식이 아니라 대기 상태로 전환됩니다.

그럼 실제로 테이블을 생성하고 SLEEP() 함수를 직접 구현하면서 동작 방식을 확인해 보겠습니다.

1단계: 테이블 생성하기

먼저 간단한 테이블을 하나 만들어 보겠습니다.

mysql> create table DemoTable(FirstName varchar(100));
Query OK, 0 rows affected (0.57 sec)

2단계: 데이터(레코드) 삽입하기

INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Adam');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.16 sec)

3단계: SLEEP() 함수와 함께 데이터 조회하기

SELECT 문으로 테이블의 모든 레코드를 조회하면서, 이번에는 SLEEP() 함수를 함께 사용해 보겠습니다.

mysql> select sleep(10),FirstName from DemoTable;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-----------+-----------+
| sleep(10) | FirstName |
+-----------+-----------+
| 0 | John |
| 0 | Adam |
| 0 | Bob |
| 0 | Chris |
| 0 | Robert |
+-----------+-----------+
5 rows in set (50.00 sec)

실행 결과 분석

주목할 점은 총 실행 시간입니다. 테이블에는 5개의 행이 있고, 각 행마다 SLEEP(10), 즉 10초씩 대기하기 때문에 전체 쿼리가 완료되는 데 50초가 걸렸습니다.

SLEEP() 함수는 정상적으로 대기가 완료되면 0을 반환합니다. 이처럼 MySQL의 SLEEP() 함수는 CPU 자원을 낭비하는 바쁜 대기 방식이 아니라, 지정된 시간만큼 쿼리 실행을 효율적으로 지연시키는 역할을 합니다.