Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tại sao kích hoạt MySQL này gây ra tràn ngăn xếp?

Tôi đã gặp phải vấn đề tương tự ngày hôm nay, mọi trình kích hoạt đều gây ra việc vượt quá ngăn xếp. Hóa ra cài đặt Máy chủ cộng đồng Zend của tôi đi kèm với tệp my.cnf mặc định trong đó kích thước thread_stack được đặt thành 128K, dẫn đến 131072 byte có sẵn cho ngăn xếp trong mỗi luồng:

mysql> show variables where `Variable_name` = 'thread_stack';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| thread_stack  | 131072 |
+---------------+--------+

Vì vậy, tôi đã nhận xét dòng trong /usr/local/zend/mysql/data/my.cnf, khởi động lại daemon mysql và thì đấy! mặc định 192K là

mysql> show variables where `Variable_name` = 'thread_stack';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| thread_stack  | 196608 |
+---------------+--------+

Bây giờ trình kích hoạt bảng &tchester của bạn hoạt động hoàn hảo :) (mặc dù vậy hãy lưu ý dấu phân cách)

mysql> CREATE TABLE `job_title` (
    ->   `job_id` int(11) NOT NULL AUTO_INCREMENT,
    ->   `position_id` int(11) DEFAULT NULL,
    ->   `title` varchar(255) COLLATE latin1_general_cs NOT NULL,
    ->   `selectable` tinyint(4) NOT NULL DEFAULT '0',
    ->   PRIMARY KEY (`job_id`),
    ->   UNIQUE KEY `title` (`title`)
    -> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.14 sec)

mysql> DELIMITER &&
mysql> create trigger job_position_trigger   
    ->   before insert on job_title for each row  
    -> begin    
    ->     if new.position_id is null then       
    ->        set @position = (select max(position_id)+1 from job_title);
    ->        if @position is null then set @position = 1; end if;
    ->        set new.position_id = @position;    
    ->     end if;  
    -> end; 
    -> &&
Query OK, 0 rows affected (0.29 sec)

mysql> DELIMITER ;
mysql> insert into job_title (title, selectable) values ("test", 1);
Query OK, 1 row affected (0.00 sec)

mysql> insert into job_title (title, selectable) values ("test2", 3);
Query OK, 1 row affected (0.00 sec)

mysql> select * from job_title;
+--------+-------------+-------+------------+
| job_id | position_id | title | selectable |
+--------+-------------+-------+------------+
|      1 |           1 | test  |          1 |
|      2 |           2 | test2 |          3 |
+--------+-------------+-------+------------+
2 rows in set (0.00 sec)

Lỗi bạn gặp phải, 9024 byte được sử dụng trong ngăn xếp 131072 byte và 128000 byte cần thiết, có ý nghĩa:9024 + 128000> 131072.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực hành tốt nhất để thiết kế vai trò người dùng và hệ thống quyền?

  2. Nhận mySQL MONTH () để sử dụng các số 0 ở đầu?

  3. Tôi nhận được nhiều select @@ session.tx_read_only, một cái có làm như vậy không?

  4. Kết hợp kết quả từ hai bảng thành dữ liệu JSON

  5. NameError:name '_mysql' không được xác định sau khi thiết lập thay đổi thành mysql