I ran a test using Intel's timed workload wear indication feature on a
100G 710 series SSD.
The test works like this : you reset the wear indication counters, then
start running
some workload (in my case pgbench at scale 100 for 4 hours). During the
test run
a wear indication attribute can be read via smartctl. This contains the
drive's estimate
for the total drive wear lifetime used during the test run time.
Provided we trust
the drive's estimate, this in turn provides an answer to the interesting
question
"how long before my drive wears out in production?". That is, provided
the test
workload can be reasonably accurately related to production workload.
Executive summary : the drive says that we used 0.025% of its wear life
during this 4h test. The test performed 47 million transactions on a
roughly 17G database.
We think that this pgbench workload performs transactions at roughly
10X the rate we expect from our application in production under heavy load.
So the drive says you could run this pgbench test for about two years
before wearing out the flash devices. Or 20 years under our expected
production
workload.
Smart attributes read just after test completion:
[root@server1 9.1]# smartctl -A /dev/sda
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-2.6.32-71.29.1.el6.x86_64]
(local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 5
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE
UPDATED WHEN_FAILED RAW_VALUE
3 Spin_Up_Time 0x0020 100 100 000 Old_age
Offline - 0
4 Start_Stop_Count 0x0030 100 100 000 Old_age
Offline - 0
5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age
Always - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age
Always - 90
12 Power_Cycle_Count 0x0032 100 100 000 Old_age
Always - 8
170 Reserve_Block_Count 0x0033 100 100 010 Pre-fail
Always - 0
171 Program_Fail_Count 0x0032 100 100 000 Old_age
Always - 0
172 Erase_Fail_Count 0x0032 100 100 000 Old_age
Always - 0
174 Unknown_Attribute 0x0032 100 100 000 Old_age
Always - 4
183 SATA_Downshift_Count 0x0030 100 100 000 Old_age
Offline - 0
184 End-to-End_Error 0x0032 100 100 090 Old_age
Always - 0
187 Reported_Uncorrect 0x0032 100 100 000 Old_age
Always - 0
190 Airflow_Temperature_Cel 0x0032 073 070 000 Old_age
Always - 27 (Min/Max 17/30)
192 Unsafe_Shutdown_Count 0x0032 100 100 000 Old_age
Always - 4
194 Temperature_Celsius 0x0032 100 100 000 Old_age
Always - 32
199 UDMA_CRC_Error_Count 0x0030 100 100 000 Old_age
Offline - 0
225 Host_Writes_32MiB 0x0032 100 100 000 Old_age
Always - 51362
226 Workld_Media_Wear_Indic 0x0032 100 100 000 Old_age
Always - 26
227 Workld_Host_Reads_Perc 0x0032 100 100 000 Old_age
Always - 1
228 Workload_Minutes 0x0032 100 100 000 Old_age
Always - 242
232 Available_Reservd_Space 0x0033 100 100 010 Pre-fail
Always - 0
233 Media_Wearout_Indicator 0x0032 100 100 000 Old_age
Always - 0
241 Host_Writes_32MiB 0x0032 100 100 000 Old_age
Always - 51362
242 Host_Reads_32MiB 0x0032 100 100 000 Old_age
Always - 822
pgbench output from the test run:
bash-4.1$ /usr/pgsql-9.1/bin/pgbench -T 14400 -j 8 -c 64
starting vacuum...end.
transaction type: TPC-B (sort of)
scaling factor: 1000
query mode: simple
number of clients: 64
number of threads: 8
duration: 14400 s
number of transactions actually processed: 47205109
tps = 3278.127690 (including connections establishing)
tps = 3278.135396 (excluding connections establishing)
--
Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance