Hi Mark,
    Thanks for taking the time to reply.

     I like the idea of changing our counter model to reduce the 
contention around the one file. I will talk to the other developers 
about this.

     I re-read the reference you mentioned 
"http://www.innodb.com/ibman.html#InnoDB_restrictions";  and do 
not see the problem regarding using table level locks on the 
counter table, while we use transaction control on all the rest of the 
tables.  I can see the potential for problems if we mix table locks 
and transaction control on the same table, but in our case the 
counter table is never referenced except by one function and that 
function uses the table level locks, and always uses its own 
connection. 

        By re-asking my question I am not trying to say you are wrong, 
I am simply trying to understand things to make sure we can 
remove any other  potential problems we have lurking in our code. 

         Thanks again for taking the time to reply. This problem has 
been haunting us for two months now and yours is the first contact 
we have had with someone who works with MySql in a production 
environment. 

Thanks
Steff

On 11 Feb 2003 at 19:09, Mark Matthews wrote:

Date sent:              Tue, 11 Feb 2003 19:09:16 -0600
From:                   Mark Matthews <[EMAIL PROTECTED]>
To:                     [EMAIL PROTECTED]
Copies to:              [EMAIL PROTECTED], [EMAIL PROTECTED]
Subject:                Re: Transaction problems using InnoDB, "not 
locked with LOCKTABLES"

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> [EMAIL PROTECTED] wrote:
> > Hello,
> >     We are experiencing severe problems when running MySql with 
> > INNODB in a  production environment.  Applications which work 
> > fine under light load fail when under production load.
> > 
> > Our MySql environment is as follows:
> > OS Platform        : Windows 2000 Service Pack 2
> > Machine description:
> > Compiler           : VC++ 6.0
> > Architecture       : i686
> > Total Memory       : 2097151 KB RAM
> > Server Info                        3.23.54-max-nt-log
> > have_innodb                        YES
> > innodb_additional_mem_pool_size    104857600
> > innodb_buffer_pool_size            1048576000
> > innodb_data_file_path              ibdata1
> > innodb_data_home_dir               
> > innodb_file_io_threads             4
> > innodb_force_recovery              0
> > innodb_thread_concurrency          8
> > innodb_flush_log_at_trx_commit     1
> > innodb_fast_shutdown               ON
> > innodb_flush_method                
> > innodb_lock_wait_timeout           50
> > innodb_log_arch_dir                
> > innodb_log_archive                 OFF
> > innodb_log_buffer_size             1048576
> > innodb_log_file_size               5242880
> > innodb_log_files_in_group          2
> > innodb_log_group_home_dir          .\
> > innodb_mirrored_log_groups         1
> > 
> > 
> > We have a large block of SQL statements (about 50) which we 
> > would like to treat as  one transaction.  The software works fine
> > when running in a limited environment,  but issues intermittent
> > errors when running in production.
> > 
> > All the errors follow the pattern of "java.sql.SQLException: General
> > error: Table 'productsprovided'  was not locked with LOCK TABLES". 
> > 
> > The table name will be different at various times (even though the
> > code being executed is always the same), but the error is always
> > talking about a failure to lock the tables.
> > 
> >  We are using  two different connections within this one processing 
> > loop. The one connection shows up as number 7 below, while
> > the other is number 12. Our expectation is that these two 
> > connections will operate independently, even though the Java code is
> > working with them both within our "transaction".  Our expectation is
> > that a rollback on connection 7 will NOT effect the activities which
> > had taken place on connection 12 across this same timespan. Along
> > the same lines we would expect the lock and unlock on connection 12
> > will not affect the transaction under way on connection 7. 
> > 
> > Our SQL in this application follows the following pattern. (the
> > following is a section from the MysQL log with just one instance of
> > the application running):
> > 
> > 030125 20:24:29       7 Query       SET autocommit=0
> >                       7 Query       BEGIN
> >                       7 Query       Select * from accountsprovided
> >                       Where
> > ExternalID='I06'AND FinServProvID = 'C33'
> >                       7 Query       UPDATE accountsprovided SET
> > Enabled='Y' WHERE  AccountID = 'CKCBSBF2994309'
> >                       7 Query       Select * from account Where
> >                       AccountID
> > =  'CKCBSBF2994309'
> >                       7 Query       UPDATE account SET 
> > PreLimit=10000.00 WHERE  AccountID = 'CKCBSBF2994309'
> > 
> >                      12 Query       Lock Table Control Write
> >                      12 Query       Select * From Control
> >                      12 Query       Update Control set NextID =
> >                      6999244 12 Query       Unlock Tables
> > 
> >                       7 Query       INSERT INTO productsowned (
> > VestedValue, Quantity ) VALUES ( 7293.90, 7293.9)
> > 
> > ...  About another 40 lines of SQL following this same general
> > pattern but using different tables.
> > 
> >                       7 Query       Update cachestatus Set UpdatedOn
> >                       =
> > null, UpdatedBy =  'XMLWarehouseLoader' Where PrimaryID = 
> > 'CKCBSBF2994310' AND SecondaryID = 'CKCBSBF2994311'
> >                       7 Query       COMMIT
> >                       7 Query       SET autocommit=1
> > 
> >     We are unable to determine what other activities taking place on
> >     
> > the server/tables are causing the conflict. Other applications are
> > running against this database which are doing allot of Selects and a
> > few updates, all without any explicit transaction control
> > (autocommit=1). 
> > 
> >      Will someone please provide us with some insights into what we 
> > are doing wrong?
> 
> It appears that you are trying to use two different locking models,
> and not noticing the problems with doing that until you get enough
> concurrency going in your system (i.e. production load levels)
> 
> Heikki can add to this, but it's not usually the best idea in the
> world to mix 'LOCK TABLES' and InnoDB (see
> http://www.innodb.com/ibman.html#InnoDB_restrictions) unless you
> really know how it's going to interact.
> 
>  From your SQL, it appears that you are attempting to use 'LOCK
>  TABLES' 
> to implement a 'sequence' generator. There are two shortcomings with
> your approach. First it won't scale well, because all transactions are
> serializing on a single row...which is probably why you're getting
> these problems. Second, you're locking for _every_ transaction, when
> if you want to use this sequence-generator concept, you'd be better
> off grabbing a range of ids during the lock phase, caching that range,
> and dispensing them from the Java end. This will limit the serializing
> effect, but the size of the 'range' will need to be tuned to match
> your load to avoid the same problem, but not waste ids.
> 
> I suggest taking a look at Paul Dubois' excellent book, 'MySQL
> Cookbook' from O'reiley, as he has a whole section on generating
> sequences, a few of which require _NO_ locking on your part :)
> 
>  -Mark
> - -- 
> MySQL 2003 Users Conference -> http://www.mysql.com/events/uc2003/
> 
> For technical support contracts, visit
> https://order.mysql.com/?ref=mmma
> 
>      __  ___     ___ ____  __
>     /  |/  /_ __/ __/ __ \/ /  Mark Matthews <[EMAIL PROTECTED]>
>    / /|_/ / // /\ \/ /_/ / /__ MySQL AB, Full-Time Developer -
>    JDBC/Java
>   /_/  /_/\_, /___/\___\_\___/ Flossmoor (Chicago), IL USA
>          <___/ www.mysql.com
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.1.90 (MingW32)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
> 
> iD8DBQE+SZ7EtvXNTca6JD8RAj53AKCF2dA8nsHVJAw7OLx/KvmFdHsivACgmAec
> VLAje7jcy7AmEloRUFiGD7Q=
> =IMEe
> -----END PGP SIGNATURE-----
> 
> 
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
> 
> To request this thread, e-mail <[EMAIL PROTECTED]> To
> unsubscribe, e-mail
> <[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php
> 


--
Steff McGonagle
Envisage Information Systems, Inc.

Phone (315) 497-9202 x16
www.EnvisageSystems.com
www.Enveritus.com



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to