Great writeup. Now on the wiki at: http://dbmail.org/dokuwiki/doku.php?id=mysql_notes
I left a space where we should include more information about configuring InnoDB parameters for good performance. This does tend to be a FAQ, and the bits of information we do have about it are scattered all over the place. Aaron On Tue, Jul 31, 2007, Andrea Brancatelli <[EMAIL PROTECTED]> said: > Just an addendum. > > With innodb_file_per_table whenever you delete a table or a database, the > whole .idb file gets deleted so you instantly get your space back. Maybe I > wasn't clear enough on this in the latest lines of my mail. > > -----Messaggio originale----- > Da: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Per conto > di Andrea Brancatelli > Inviato: marted� 31 luglio 2007 17.16 > A: 'DBMail mailinglist' > Oggetto: R: [Dbmail] Advantages of innodb_file_per_table (was: > Tabledbmail_messages is full) > > I partially explained in my last email. > > Let me try to summarize everything. > > WITHOUT innodb_file_per_table: > - you have one shared tablespace for all the tables. This gives you the > advantage of limiting the space your db will be using (unless you activate > the autoextend) but give you the disadvantage of preallocating all the space > you'll be using > - the problem everyone is having is because on the autoextend. Actually > it's conceptually wrong to use the autoextend when you have a single > tablespace, because whenever your DB will grow, the tablespace will grow, > but it will never get smaller, even when you delete a table or when you run > an optimize > - the optimize table issue is pretty simple. When you run optimize table, > it simple re-create the whole table you're creating, writing all the datas > sequentially. This gives you a certain degree of speed when you'll be > accessing datas later, but may be a problem because at a certain moment (a > second before the optimize finish) you'll end up having 2 copies of the same > table: the old one, and the new temporary one that will be renamed as the > new one. If you are using the shared tablespace with the autoextend this > will probably mean that your shared tablespace will GROW because the amount > of datas will double, and when the optimize will finish the old table will > be deleted and all the hypothetically-free space will just sit there waiting > to be used. This is the key point. InnoDB doesn't free the disk space > because it just wait for the space to be used again, because it's designed > to be used in an environment where you preallocate the space for the db. So > since you preallocated it, why should you care about freeing it? > > > WITH innodb_file_per_table: > - you have one (actually two) file per each InnoDB table. Each table/index > file will stay in the database directory (which _to me_ appears as another > big advantage) > - when you add a table you get another .idb file. Whenever your table grow, > the idb file grows, and your filesystem space decrease > - the optimize process here gets interesting. When you run optimize table > the innodb engine will start to create a NEW .idb file with a temporary > name, using only the space it actually needs to store the datas. When the > optimize table has ended, it will delete the old .idb file and rename the > temporary one to the correct name. this mean that if your old table's .idb > file had grown up to 3, 4, 5, 100 GB but you have only 100 MB of datas in > it, the new .idb file will be 100MB while the one that will be deleted was > 3, 4, 5, 100GB. > > > That's it in term of space. In terms of speed or whatever else I can't say > if there's any advantage as I haven't done any testing myself, but what I > can assure you for sure is that, having any .idb in every directory you can > mount directory from different HDs or RAIDs for different DBs thus having > better racing conditions within the same MySQL server. > > Probably you could achieve the same result having more than one shared > tablespace, but frankly I have no experience with this. > > > Summarizing everything: > > - If you have a single DB server: use a shared InnoDB tablespace > preallocating the space and disabling the autoextend. Using the optimize > table will give you a better optimization of the tables, and you'll have no > problem with the space as it's already allocated up to a fixed size > > - If you have a machine with various tasks going on, like a mail server, > web server, db server and whatever, use the innodb_file_per_table. Usigon > the optimize table you'll reclaim your space back whenever you delete > anything or whenever any table will significantly decrease in size. > > > Doubt? Question? Fear? Panic? > > > -----Messaggio originale----- > Da: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Per conto > di Peter Rabbitson > Inviato: marted� 31 luglio 2007 16.52 > A: DBMail mailinglist > Oggetto: [Dbmail] Advantages of innodb_file_per_table (was: Table > dbmail_messages is full) > > Hi, > Sorry for hijacking the thread. Can someone clarify what is the > advantage of using innodb_file_per_table versus one infinitely growing > tablespace? > > Thanks > > Peter > _______________________________________________ > DBmail mailing list > DBmail@dbmail.org > https://mailman.fastxs.nl/mailman/listinfo/dbmail > > _______________________________________________ > DBmail mailing list > DBmail@dbmail.org > https://mailman.fastxs.nl/mailman/listinfo/dbmail > > > _______________________________________________ > DBmail mailing list > DBmail@dbmail.org > https://mailman.fastxs.nl/mailman/listinfo/dbmail > -- _______________________________________________ DBmail mailing list DBmail@dbmail.org https://mailman.fastxs.nl/mailman/listinfo/dbmail