मैं आज एक ही समस्या में भाग गया, हर ट्रिगर एक स्टैक ओवररन का कारण बनता है। मेरा Zend कम्युनिटी सर्वर इंस्टॉलेशन एक डिफ़ॉल्ट my.cnf फ़ाइल के साथ आता है जिसमें थ्रेड_स्टैक का आकार 128K पर सेट किया गया था, जिसके परिणामस्वरूप प्रत्येक थ्रेड में स्टैक के लिए 131072 बाइट्स उपलब्ध थे:
mysql> show variables where `Variable_name` = 'thread_stack';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| thread_stack | 131072 |
+---------------+--------+
इसलिए मैंने /usr/local/zend/mysql/data/my.cnf में लाइन पर टिप्पणी की, mysql डेमॉन और वॉइला को फिर से शुरू किया! डिफ़ॉल्ट 192K है
mysql> show variables where `Variable_name` = 'thread_stack';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| thread_stack | 196608 |
+---------------+--------+
अब आपकी टेबल और चेस्टर का ट्रिगर पूरी तरह से काम करता है :) (हालांकि डिलीमीटर नोट करें)
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)
आपको जो त्रुटि मिली है, 131072 बाइट स्टैक के 9024 बाइट्स का उपयोग किया गया है, और 128000 बाइट्स की आवश्यकता है, यह समझ में आता है:9024 + 128000> 131072।