I'll prepare a dummy test with direct mysqli opertating - without using
Zend Framework at all - just to make sure that it's not a framework's
error. I'm pretty sure it's not but still want to have solid approvements.


2010/5/25 Aleksey Zapparov <[email protected]>:
> Forgotten trace and profiler info.
>
> 2010/5/25 Aleksey Zapparov <[email protected]>:
>> Hello everybody again,
>>
>> Unfortunately I forgot to add CC to group, so we were discussing problem
>> with Саша privately :)) But he mentioned that there left only two of us,
>> so I'm repeating abridged summary of discussion.
>>
>> First of all, I successfully repeated error mentioned by Саша. It do not
>> related with database engine (so I was able to successfully repeat it
>> with both MyISAM and InnoDB).
>>
>> I was keeping track of connections, while storming a server. And indeed
>> there were only ONE connection to the database. But after a 'storm' (in
>> fact 5-10 rapidly repeated requests was enough) server became down. I'll
>> explain in details a little bit later. Here's dummy stormer in Ruby I
>> was using to reproduce an error:
>>
>>
>> require 'rubygems'
>> require 'httpclient'
>>
>> client = HTTPClient.new
>> uri    = 'http://localhost/zfw'
>> status = 'ACTIVE'
>>
>> (1..128).each do
>>  status = ('ACTIVE' == status) ? 'INACTIVE' : 'ACTIVE'
>>  client.post(uri, { 'status' => status }
>> end
>>
>>
>> So after running this stormer, assuming 'http://localhost/zfw' is an
>> index action of index controller of our application which selects rows
>> from database (there were only 32 rows total in database on testing),
>> index action started throw Zend_Db_Adapter_Mysqli_Exception all the
>> time (until I have restarted Apache2 server). This exception had empty
>> message. Here's a trace:
>>
>> #0 /var/www/zfw-app/library/Zend/Db/Adapter/Abstract.php(304):
>> Zend_Db_Adapter_Mysqli->_connect()
>> #1 /var/www/zfw-app/library/Zend/Db/Adapter/Mysqli.php(194):
>> Zend_Db_Adapter_Abstract->getConnection()
>> #2 /var/www/zfw-app/library/Zend/Db/Table/Abstract.php(823):
>> Zend_Db_Adapter_Mysqli->describeTable('automobili_news', NULL)
>> #3 /var/www/zfw-app/library/Zend/Db/Table/Abstract.php(862):
>> Zend_Db_Table_Abstract->_setupMetadata()
>> #4 /var/www/zfw-app/library/Zend/Db/Table/Abstract.php(969):
>> Zend_Db_Table_Abstract->_setupPrimaryKey()
>> #5 /var/www/zfw-app/library/Zend/Db/Table/Select.php(100):
>> Zend_Db_Table_Abstract->info()
>> #6 /var/www/zfw-app/library/Zend/Db/Table/Select.php(78):
>> Zend_Db_Table_Select->setTable(Object(Automobili_Model_Table_News))
>> #7 /var/www/zfw-app/library/Zend/Db/Table/Abstract.php(1005):
>> Zend_Db_Table_Select->__construct(Object(Automobili_Model_Table_News))
>> #8 /var/www/zfw-app/application/controllers/IndexController.php(14):
>> Zend_Db_Table_Abstract->select()
>> #9 /var/www/zfw-app/library/Zend/Controller/Action.php(513):
>> IndexController->indexAction()
>> #10 /var/www/zfw-app/library/Zend/Controller/Dispatcher/Standard.php(289):
>> Zend_Controller_Action->dispatch('indexAction')
>> #11 /var/www/zfw-app/library/Zend/Controller/Front.php(954):
>> Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http),
>> Object(Zend_Controller_Response_Http))
>> #12 /var/www/zfw-app/library/Zend/Application/Bootstrap/Bootstrap.php(97):
>> Zend_Controller_Front->dispatch()
>> #13 /var/www/zfw-app/library/Zend/Application.php(366):
>> Zend_Application_Bootstrap_Bootstrap->run()
>> #14 /var/www/zfw-app/public/index.php(26): Zend_Application->run()
>> #15 {main}
>>
>>
>> For those who are interested in details I have attached an xdebug
>> trace as an attachment (trace.xt.gz) and xdebug profiler data
>> (cachegrind.out.gz).
>>
>> After all I have switched config to use pdo_mysql instead of mysqli and
>> was able to run my (previously described) stormer without any problems
>> even with 1024 requests. So I guess there's something wrong with mysqli
>> adapter (of PHP).
>>
>>
>> 2010/5/25 Саша Стаменковић <[email protected]>:
>>> Zend_Db_Statement ин setFetchMode() calls $this->closeCursor(); only in
>>> default case fro $mode ?!
>>>
>>> Regards,
>>> Saša Stamenković
>>>
>>>
>>> On Tue, May 25, 2010 at 11:40 AM, Саша Стаменковић <[email protected]>
>>> wrote:
>>>>
>>>> Cache can be the temporary fix.
>>>>
>>>> Regards,
>>>> Saša Stamenković
>>>>
>>>>
>>>> On Tue, May 25, 2010 at 11:35 AM, Саша Стаменковић <[email protected]>
>>>> wrote:
>>>>>
>>>>> I found where the problem was!
>>>>> $newsTable->publishNews($ids);
>>>>> foreach ($newsTable->fetchNewsByIds($ids) as $news) {
>>>>> $news->publishOnTwitter();
>>>>> }
>>>>> Row have this publish on twitter method, which shouldn't have nothing to
>>>>> do with the problem - WRONG! It has. When I post it on twitter, a great
>>>>> amount of traffic is generated, people are opening concrete news and break
>>>>> my limit of 15 connections.
>>>>> Looks like I need more connections, heh.
>>>>> Regards,
>>>>> Saša Stamenković
>>>>>
>>>>>
>>>>> On Tue, May 25, 2010 at 10:57 AM, Саша Стаменковић <[email protected]>
>>>>> wrote:
>>>>>>
>>>>>> BTW, my limit is not
>>>>>> mysqli.max_links = 15
>>>>>> its a property of mysql.user table, MAX_USER_CONNECTIONS.
>>>>>> http://dev.mysql.com/doc/refman/5.1/en/user-resources.html
>>>>>>
>>>>>> Regards,
>>>>>> Saša Stamenković
>>>>>>
>>>>>>
>>>>>> On Mon, May 24, 2010 at 11:44 PM, Aleksey Zapparov <[email protected]>
>>>>>> wrote:
>>>>>>>
>>>>>>> Hello,
>>>>>>>
>>>>>>> Was not able to wait until tomorow to test on FreeBSD as it was really
>>>>>>> interesting for will it work or not. And it does. Here's mysqli config
>>>>>>> of my
>>>>>>> php.ini on FreeBSD:
>>>>>>>
>>>>>>> mysqli.max_links = 15
>>>>>>> mysqli.default_port = 3306
>>>>>>> mysqli.default_socket =
>>>>>>> mysqli.default_host =
>>>>>>> mysqli.default_user =
>>>>>>> mysqli.default_pw =
>>>>>>> mysqli.reconnect = Off
>>>>>>>
>>>>>>> You can see it's working at: http://sandbox.ixti.ru/zfw/ (it will be
>>>>>>> available
>>>>>>> at least until 27th of May 2010).
>>>>>>>
>>>>>>>
>>>>>>> 2010/5/24 Aleksey Zapparov <[email protected]>:
>>>>>>> > Hello,
>>>>>>> >
>>>>>>> > I guess you are doing something wrong. I have just build up a little
>>>>>>> > app from
>>>>>>> > scratch with zf tool (attachment app.tar.gz) which simply "batch"
>>>>>>> > updates
>>>>>>> > 32 rows with new status - very dumy logic in controller:
>>>>>>> >
>>>>>>> >    $news = new Automobili_Model_Table_News();
>>>>>>> >    $ids  = range(1,32);
>>>>>>> >
>>>>>>> >    $news->update(
>>>>>>> >        array('status' => $status),
>>>>>>> >        $news->getAdapter()->quoteInto('id IN (?)', $ids,
>>>>>>> > Zend_Db::INT_TYPE)
>>>>>>> >    );
>>>>>>> >
>>>>>>> > And it works good for me at least on my GNU/Linux.
>>>>>>> > Here's my php.ini (section of MySQLi):
>>>>>>> >
>>>>>>> > mysqli.max_persistent = 15
>>>>>>> > mysqli.allow_persistent = Off
>>>>>>> > mysqli.max_links = 15
>>>>>>> > mysqli.cache_size = 2000
>>>>>>> > mysqli.default_port = 3306
>>>>>>> > mysqli.default_socket =
>>>>>>> > mysqli.default_host =
>>>>>>> > mysqli.default_user =
>>>>>>> > mysqli.default_pw =
>>>>>>> > mysqli.reconnect = Off
>>>>>>> >
>>>>>>> >
>>>>>>> > I have a FreeBSD running host so tomorow I'm gonna check this app
>>>>>>> > against
>>>>>>> > it. Anyway you can try my dummy app by yourself (I've removed some
>>>>>>> > portion
>>>>>>> > from your News table class (which was referring to another model) to
>>>>>>> > be able
>>>>>>> > run this code).
>>>>>>> >
>>>>>>> > Attached files are:
>>>>>>> > app.tar.gz - Application itself
>>>>>>> > dump.sql.gz - MySQL dump of table (I have used to test)
>>>>>>> >
>>>>>>> >
>>>>>>> > 2010/5/24 Саша Стаменковић <[email protected]>:
>>>>>>> >> Okay, I'm using one connection, one db, one adapter, but still, I
>>>>>>> >> have
>>>>>>> >> problems. I'm pretty sure I'm using it right, because I'm using it
>>>>>>> >> like it
>>>>>>> >> says in the doc.
>>>>>>> >> The problem is, I can exec up to 15 queries in the row, and this
>>>>>>> >> quoteInto
>>>>>>> >> with array param is hitting my limits.
>>>>>>> >> I can send you my code on private mail Thomas.
>>>>>>> >>
>>>>>>> >> Regards,
>>>>>>> >> Saša Stamenković
>>>>>>> >>
>>>>>>> >>
>>>>>>> >> On Mon, May 24, 2010 at 9:27 PM, Thomas D. <[email protected]>
>>>>>>> >> wrote:
>>>>>>> >>>
>>>>>>> >>> Hi,
>>>>>>> >>>
>>>>>>> >>> Саша Стаменковић wrote:
>>>>>>> >>> > Sure, when you have unlimited number of db operation over
>>>>>>> >>> > a period of time. I'll come up with my own offline quoting.
>>>>>>> >>>
>>>>>>> >>> Seems like you are missing one fact all over the time:
>>>>>>> >>> That quoting would use a connection to a database server, isn't a
>>>>>>> >>> problem,
>>>>>>> >>> because Zend_Db_* would use one connection across every component.
>>>>>>> >>> Only if
>>>>>>> >>> you are working with multiple databases, it might be a problem,
>>>>>>> >>> because you
>>>>>>> >>> would have one adapter per database (=nAdapter * 1 Connection = n
>>>>>>> >>> connections)...
>>>>>>> >>>
>>>>>>> >>> So again:
>>>>>>> >>> When you are working with just *one* database, everything should
>>>>>>> >>> work
>>>>>>> >>> fine.
>>>>>>> >>> If not, *you* are doing something wrong.
>>>>>>> >>>
>>>>>>> >>> Doing your own quoting is everything but not safe. You should use
>>>>>>> >>> the
>>>>>>> >>> adapter's escape function, if your application should be safe.
>>>>>>> >>>
>>>>>>> >>>
>>>>>>> >>> --
>>>>>>> >>> Regards,
>>>>>>> >>> Thomas
>>>>>>> >>>
>>>>>>> >>>
>>>>>>> >>
>>>>>>> >>
>>>>>>> >
>>>>>>> >
>>>>>>> >
>>>>>>> > --
>>>>>>> > Sincerely yours,
>>>>>>> > Aleksey V. Zapparov A.K.A. ixti
>>>>>>> > FSF Member #7118
>>>>>>> > Mobile Phone: +34 617 179 344
>>>>>>> > Homepage: http://www.ixti.ru
>>>>>>> > JID: [email protected]
>>>>>>> >
>>>>>>> > *Origin: Happy Hacking!
>>>>>>> >
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Sincerely yours,
>>>>>>> Aleksey V. Zapparov A.K.A. ixti
>>>>>>> FSF Member #7118
>>>>>>> Mobile Phone: +34 617 179 344
>>>>>>> Homepage: http://www.ixti.ru
>>>>>>> JID: [email protected]
>>>>>>>
>>>>>>> *Origin: Happy Hacking!
>>>>>>
>>>>>
>>>>
>>>
>>>
>>
>>
>>
>> --
>> Sincerely yours,
>> Aleksey V. Zapparov A.K.A. ixti
>> FSF Member #7118
>> Mobile Phone: +34 617 179 344
>> Homepage: http://www.ixti.ru
>> JID: [email protected]
>>
>> *Origin: Happy Hacking!
>>
>
>
>
> --
> Sincerely yours,
> Aleksey V. Zapparov A.K.A. ixti
> FSF Member #7118
> Mobile Phone: +34 617 179 344
> Homepage: http://www.ixti.ru
> JID: [email protected]
>
> *Origin: Happy Hacking!
>



-- 
Sincerely yours,
Aleksey V. Zapparov A.K.A. ixti
FSF Member #7118
Mobile Phone: +34 617 179 344
Homepage: http://www.ixti.ru
JID: [email protected]

*Origin: Happy Hacking!

Reply via email to