Re: Bacula 11.0.2 update notes
Eric Bollengier via Bacula-devel <[email protected]> Sat, 29 May 2021 11:15:29 +0200
| Newsgroups | gmane.comp.sysutils.backup.bacula.devel |
|---|---|
| Message-ID | <[email protected]> |
Hello Phil, Thanks for your patch, I will apply it for 11.0.4, some more comments are inline. On 21.05.21 18:26, Phil Stracchino wrote: > Eric, > > The following would be my first-cut patch. > > The other way to handle restarting/resuming the copy operation when > updating to 11.0.2 would be instead of truncating the file_temp table if > it already exists, create it with its PRIMARY key already in place and > then use INSERT IGNORE instead of a simple INSERT. This would ensure > that no record is copied twice and allow resuming the copy operation > where it left off. (There would still be some loss of efficiency in > skipping records already copied, but at least they would not have to be > written to storage a second time.) Yes, I'm not an expert here, if you have a good script to convert the catalog, I'm sure it will be appreciated. > However, there is a non-obvious schema issue that this does not address. > There are many places where we are currently using TINYBLOB types to > contain data as small as md5 checksums. This is a common, but bad, > idea. It is bad because the MySQL MEMORY storage engine, used for > explicit and implicit temporary tables, does not support the BLOB/TEXT > types, and so any temporary table that contains any column of a BLOB or > TEXT type will be forced to disk, with obvious performance impact. This is the kind of explanation I was looking for, thanks. > Clearly there are places where the size of the data is unknown and > potentially large, and there we have little alternative but to use an > appropriate BLOB type. But where we want to store binary data of a > known and manageable maximum length, we should be using VARBINARY > instead for performance reasons. > > I have already in the past converted many of the TINYBLOB columns in my > Bacula catalog schema to VARBINARY with no ill effects. I now need to > redo a few of them because we just rewrote the File table. :) > > From my most recent nightly DB backup, these are the columns I currently > have converted to VARBINARY: > > minbar:root:/dbdumps/minbar-20210521-04:55:25 # zgrep -i varbinary > bacula*schema.sql.gz > bacula.Client-schema.sql.gz: `Name` varbinary(64) NOT NULL, A directive name can be up to 127 bytes, and I'm looking to extend it at 256 or even more in a short term. A VolumeName, MediaType, etc.. have the same possible length. > I also need to re-convert File.MD5 to VARBINARY(32) and, now, change > File.Filename to VARBINARY(255). > > What is the maximum possible size of File.LStat? That is another good > candidate to become a VARBINARY. At this time, we can store up to a SHA512 in base64, I would suggest to do a test. Thanks for your patch, this is very much appreciated. Best Regards, Eric