On Fri, Aug 29, 2008 at 10:35:33AM -0700, Rick James wrote:
> > ...
> > That would give you more paralellism but really that's irrelevant:
> > you're solving a different problem to the problem solved by the
> > current built-in replication functionality provided by mysqld.
> Well, the next step... Back to the traditional 1->N replication.
> Performance on the slave can be poor because of being single-threaded.
> With your multi-source code, one could extend things further to have
> multiple binlogs coming out of the 1 master and being applied in
> parallel on each slave. This would allow [given that you "know what you
> are doing"] you to configure traditional replication to run faster on
> slaves. :)
I think that's unlikely to work very well, unless you have separate
threads per database. However you still have the issue that to achieve
the same DML affects with replication you have to follow the same time
order of executing the SQL commands as done on the source db. If you
don't do that your slaves may end up with different data. So you can only
achieve a theoretical better performance if you split up the replication
process by database. Perhaps my understanding is wrong.
> I have one system with 100 dbs. These dbs are virtually independent.
> Sometimes a flood of data goes into one db, thereby impacting any
> inserts into other dbs. With the above code, I could have multiple
> threads running on the slaves and get some parallelism, and improve the
I'm not so sure that will work. I work with similar systems and see
the same issue. However you really can't change the order of statement
execution unless you don't care that the result on the slaves may be
It might be possible, and I don't know if this is what you are hinting at
that groups of tables within a database are replicated indepedently of
other tables. If you choose how you do this _very_ carefully then yes,
perhaps you can achieve better performance.
Also row-based replication works very well and hides many of the delays
seen with statement based replication but with BIG SQL DML changes you
generate the same problem: lots of rows to replicate and thus delays.
I think MySQL will try to select between row- and statement-based
intelligently but whatever you do BIG changes take time to execute on
any DB server, whether it's MySQL, Sybase, Oracle or whatever.
In any case for me I'd love to be able to do N:1 replication and the
original idea to have a separate mysql replication process capable
of doing this would be great. It may well help solve other issues
like the one you suggest.