많은 데이터베이스 쓰기, 약 ~ 70 % 삽입 및 30 % 읽기와 관련된 응용 프로그램을 개발 중입니다. 이 비율에는 한 번의 읽기와 한 번의 쓰기로 간주되는 업데이트도 포함됩니다. insert 문을 통해 여러 클라이언트가 아래 insert 문을 통해 데이터베이스에 데이터를 삽입합니다.
$mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)");
문제는 내가 중 하나를 사용해야입니다 insert_delay 또는 사용 mysqli_multi_query의 삽입 문은 서버에 ~ 100 %의 CPU를 사용하기 때문에 메커니즘을. 데이터베이스에서 InnoDB 엔진을 사용하고 있으므로 삽입 지연이 불가능합니다. 서버에서의 삽입은 ~ 36k / hr이고 99.89 % 읽습니다. 또한 단일 쿼리에서 7 번 데이터를 검색 하는 select 문을 사용하고 있습니다 .이 쿼리는 서버에서 실행하는 데 150 초가 걸립니다. 이 작업에 어떤 종류의 기술이나 메커니즘을 사용할 수 있습니까? 서버 메모리가 2GB인데 메모리를 확장해야합니까?. 이 문제를 살펴보면 어떤 제안이라도 감사 할 것입니다.
테이블의 구조 :
+-----------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user | varchar(100) | NO | | NULL | |
| uniq_name | varchar(200) | NO | | NULL | |
| ad_name | varchar(200) | NO | | NULL | |
| ad_delay_time | int(11) | NO | | NULL | |
| track_time | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
+-----------------+--------------+------+-----+-------------------+----------------+
내 데이터베이스의 현재 상태는 41k 삽입 (쓰기)을 표시하며 데이터베이스에 대해 매우 느립니다.
SHOW FULL PROCESSLIST
100 % CPU를 사용할 때 간단한 스 니펫을 줄 수 있습니까 ? 이 기간 동안 몇 개의 연결을 허용합니까?
SHOW GLOBAL VARIABLES LIKE 'innodb%';
및 SELECT VERSION();
자신의 출력을 표시합니다.