Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

MySql cursor... ?

[es] :: MySQL :: MySql cursor... ?

[ Pregleda: 1433 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stevs986
Nikolic Sladjan
Senior Software Developer
Alterset d.o.o
Beograd

Član broj: 121154
Poruke: 140
*.kbcnet.rs.



+4 Profil

icon MySql cursor... ?14.09.2010. u 11:29 - pre 165 meseci
Ovamo mi izgleda procedura, neki test.

Code:

DROP PROCEDURE IF EXISTS baza.konverzija;
CREATE PROCEDURE baza.`konverzija`()
BEGIN
   DECLARE a INT;
   DECLARE done INT DEFAULT 0;
   DECLARE C CURSOR FOR SELECT id FROM razred where id = 40;
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

   OPEN C;
     REPEAT
      FETCH C INTO a;       
      
       select 1;
      
      UNTIL done END REPEAT;

    CLOSE C;
END;


Greska koju dobijam kada uradim call konverzija() je sledeca:

MySQL Database Error: Thread stack overrun: 4996 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack.


Ne znam zasto ovo prekoraci thread_stack kada je samo jedan rekord... ?
Koliko sam razumeo guglajuci thread_stack i ne mogu da povecam, ali kako je moguce da ovako jednostavna stvar dovede do prekoracenja... ?

Zaboravih verzija MySql servera je 5.1.37

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySql cursor... ?14.09.2010. u 13:14 - pre 165 meseci
thread_stack ces lako da povecas

a evo i probao sam nije mi bilo tesko

Code:

mysql> create table razred (id int ) engine=myisam;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> delimiter $                    
mysql> CREATE PROCEDURE `konverzija`()
    -> BEGIN
    ->    DECLARE a INT;
    ->    DECLARE done INT DEFAULT 0;
    ->    DECLARE C CURSOR FOR SELECT id FROM razred where id = 40;
    ->    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    -> 
    ->    OPEN C;
    ->      REPEAT
    ->       FETCH C INTO a;       
    ->       
    ->        select 1;
    ->       
    ->       UNTIL done END REPEAT;
    -> 
    ->     CLOSE C;
    -> END;
    -> $
Query OK, 0 rows affected (0.09 sec)

mysql> delimiter ;
mysql> call konverzija();
+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> insert into razred values (40);
Query OK, 1 row affected (0.00 sec)

mysql> call konverzija();
+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> insert into razred values (40), (10), (20), (40), (40);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> call konverzija();
+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

+---+
| 1 |
+---+
| 1 | 
+---+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'thread_stack';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| thread_stack  | 262144 | 
+---------------+--------+
1 row in set (0.00 sec)



doduse ja imam default vrednost za thread stack koja je malo veca od te vrednosti koju ti imas ...

kada sam dodao thread_stack=131072 u my.cnf

Code:

mysql> show global variables like 'thread_stack';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| thread_stack  | 131072 | 
+---------------+--------+
1 row in set (0.00 sec)

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> call konverzija();
ERROR 1436 (HY000): Thread stack overrun:  8232 bytes used of a 131072 byte stack, and 128000 bytes needed.  Use 'mysqld -O thread_stack=#' to specify a bigger stack.



ne znam da li si sam smanjio thread stack ili je to uradio tvoj provajder (ako koristis shared hosting). ako si ti to uradio, valjda znas zasto - lako ces povecati, ako je provajder - oni to rade zato sto nemaju dovoljno resursa a imaju hiljade konekcija na bazu. tako da limitiraju sve sto mogu / koliko mogu. Kao sto vidis tu je thread stack smanjen na pola od onoga sto je po default-u


 
Odgovor na temu

stevs986
Nikolic Sladjan
Senior Software Developer
Alterset d.o.o
Beograd

Član broj: 121154
Poruke: 140
*.kbcnet.rs.



+4 Profil

icon Re: MySql cursor... ?14.09.2010. u 13:56 - pre 165 meseci
Mnogo hvala na detaljnom odgovoru...
Kada sam povecao thread_stack radi bez problema.

Inace radim u lokalu i takva mi je bila default vrednost.

Pozdrav, jos jednom hvala.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySql cursor... ?14.09.2010. u 14:42 - pre 165 meseci
ne znam kako je tako mali default na 5.1.37 ... cudno .. mozda je tako na windozi .. nisam proveravao ..

sve u svemu, 256K je skroz ok, 128K je bas malo
 
Odgovor na temu

stevs986
Nikolic Sladjan
Senior Software Developer
Alterset d.o.o
Beograd

Član broj: 121154
Poruke: 140
*.kbcnet.rs.



+4 Profil

icon Re: MySql cursor... ?14.09.2010. u 14:55 - pre 165 meseci
Nije windows, u pitanju je Ubuntu...
Kako god bitno je da sam resio problem... ;)

Tj. ti si resio...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: MySql cursor... ?14.09.2010. u 15:03 - pre 165 meseci
lele ... (kazes lokalno a vidim pises sa windoze pa pretpostavio, nebitan je windoze, nije ms pravio build nego mi) ... ubuntu - verovatno koristis njihov default paket, oni (kao i vecina distribucija) filozofiraju i menjaju pakete shodno sa "svojim idejama" ... uvek koristi (u produkciji, za test je potpuno nebitno dobar je i taj) binary sa dev.mysql.com .. u svakom slucaju, zgodno znati..

a sto se tice "resavanja problema", resio ga je mysql sam, rekao ti je odma "gde je greska" i "sta da promenis" :)
 
Odgovor na temu

stevs986
Nikolic Sladjan
Senior Software Developer
Alterset d.o.o
Beograd

Član broj: 121154
Poruke: 140
*.kbcnet.rs.



+4 Profil

icon Re: MySql cursor... ?14.09.2010. u 15:20 - pre 165 meseci


Da, koristim default paket... Hvala za sugestije...

Sto se tice problema, jeste sramota sve je lepo pisalo. Nego sam se nesto istripovao guglajuci da tu vrednost ne mogu da menjam, da se ona menjala s' verzijama mysql - a. Jos vise me je zacudilo jer je samo jedan record u kursoru u pitanju, nista komplikovano.
 
Odgovor na temu

[es] :: MySQL :: MySql cursor... ?

[ Pregleda: 1433 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.