From: "Austin S. Hemmelgarn" <ahferroin7@gmail.com>
To: Peter Zaitsev <pz@percona.com>, linux-btrfs@vger.kernel.org
Subject: Re: BTRFS for OLTP Databases
Date: Tue, 7 Feb 2017 10:06:34 -0500 [thread overview]
Message-ID: <4e91cc08-19a4-5433-c1d3-60918906b022@gmail.com> (raw)
In-Reply-To: <CA+RUij3aW1ZYyJPNRLzckwOCCmoWa15Eu4h142jB_-qKc49hBw@mail.gmail.com>
On 2017-02-07 08:53, Peter Zaitsev wrote:
> Hi,
>
> I have tried BTRFS from Ubuntu 16.04 LTS for write intensive OLTP MySQL
> Workload.
>
> It did not go very well ranging from multi-seconds stalls where no
> transactions are completed to the finally kernel OOPS with "no space left
> on device" error message and filesystem going read only.
How much spare space did you have allocated in the filesystem? At a
minimum, you want at least a few GB beyond what you expect to be the
maximum size of your data-set times the number of snapshots you plan to
keep around at any given time.
>
> I'm complete newbie in BTRFS so I assume I'm doing something wrong.
Not exactly wrong, but getting this to work efficiently is more art than
engineering.
>
> Do you have any advice on how BTRFS should be tuned for OLTP workload
> (large files having a lot of random writes) ? Or is this the case where
> one should simply stay away from BTRFS and use something else ?
The general recommendation is usually to avoid BTRFS for such things.
There are however a number of things you can do to improve performance:
1. Use a backing storage format that has the minimal amount of
complexity. The more data structures that get updated when a record
changes, the worse the performance will be. I don't have enough
experience with MySQL to give a specific recommendation on what backing
storage format to use, but someone else might.
2. Avoid large numbers of small transactions. The smaller the
transaction, the worse it will fragment things.
3. Use autodefrag. This will increase write load on the storage device,
but it should improve performance for reads.
4. Try using in-line compression. This can actually significantly
improve performance, especially if you have slow storage devices and a
really nice CPU.
5. If you're running raid10 mode for BTRFS, run raid1 on top of two LVM
or MD RAID0 devices instead. This sounds stupid, but it actually will
hugely improve both read and write performance without sacrificing any
data safety.
6. Look at I/O scheduler tuning. This can have a huge impact,
especially considering that most of the defaults for the various
schedulers are somewhat poor for most modern systems. I won't go into
the details here, since there are a huge number of online resources
about this.
>
> One item recommended in some places is "nodatacow" this however defeats
> the main purpose I'm looking at BTRFS - I am interested in "free"
> snapshots which look very attractive to use for database recovery scenarios
> allow instant rollback to the previous state.
Snapshots aren't free. They are quick, but they aren't free by any
means. If you're going to be using snapshots, keep them to a minimum,
performance scales inversely proportionate to the number of snapshots,
and this has a much bigger impact the more you're trying to do on the
filesystem. Also, consider whether or not you _actually_ need
filesystem level snapshots. I don't know about your full software
stack, but most good OLTP software supports rollback segments (or an
equivalent with a different name), and those are probably what you want
to use, not filesystem snapshots.
next prev parent reply other threads:[~2017-02-07 15:06 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-07 13:53 BTRFS for OLTP Databases Peter Zaitsev
2017-02-07 14:00 ` Hugo Mills
2017-02-07 14:13 ` Peter Zaitsev
2017-02-07 15:00 ` Timofey Titovets
2017-02-07 15:09 ` Austin S. Hemmelgarn
2017-02-07 15:20 ` Timofey Titovets
2017-02-07 15:43 ` Austin S. Hemmelgarn
2017-02-07 21:14 ` Kai Krakow
2017-02-07 16:22 ` Lionel Bouton
2017-02-07 19:57 ` Roman Mamedov
2017-02-07 20:36 ` Kai Krakow
2017-02-07 20:44 ` Lionel Bouton
2017-02-07 20:47 ` Austin S. Hemmelgarn
2017-02-07 21:25 ` Lionel Bouton
2017-02-07 21:35 ` Kai Krakow
2017-02-07 22:27 ` Hans van Kranenburg
2017-02-08 19:08 ` Goffredo Baroncelli
[not found] ` <b0de25a7-989e-d16a-2ce6-2b6c1edde08b@gmail.com>
2017-02-13 12:44 ` Austin S. Hemmelgarn
2017-02-13 17:16 ` linux-btrfs
2017-02-07 19:31 ` Peter Zaitsev
2017-02-07 19:50 ` Austin S. Hemmelgarn
2017-02-07 20:19 ` Kai Krakow
2017-02-07 20:27 ` Austin S. Hemmelgarn
2017-02-07 20:54 ` Kai Krakow
2017-02-08 12:12 ` Austin S. Hemmelgarn
2017-02-08 2:11 ` Peter Zaitsev
2017-02-08 12:14 ` Martin Raiber
2017-02-08 13:00 ` Adrian Brzezinski
2017-02-08 13:08 ` Austin S. Hemmelgarn
2017-02-08 13:26 ` Martin Raiber
2017-02-08 13:32 ` Austin S. Hemmelgarn
2017-02-08 14:28 ` Adrian Brzezinski
2017-02-08 13:38 ` Peter Zaitsev
2017-02-07 14:47 ` Peter Grandi
2017-02-07 15:06 ` Austin S. Hemmelgarn [this message]
2017-02-07 19:39 ` Kai Krakow
2017-02-07 19:59 ` Austin S. Hemmelgarn
2017-02-07 18:27 ` Jeff Mahoney
2017-02-07 18:59 ` Peter Zaitsev
2017-02-07 19:54 ` Austin S. Hemmelgarn
2017-02-07 20:40 ` Peter Zaitsev
2017-02-07 22:08 ` Hans van Kranenburg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4e91cc08-19a4-5433-c1d3-60918906b022@gmail.com \
--to=ahferroin7@gmail.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=pz@percona.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).