Your history is a file you can open.
Vitals keeps what your Mac and each app used in one file on your Mac. It is an ordinary SQLite database, so you can ask it your own questions: when the Mac ran hot, which app used the most energy, how this month compares with the last.
Where it is
~/Library/Application Support/Vitals/history.sqlite
Open it with the sqlite3 command that comes with macOS, or with any app that reads SQLite. Read from it, and leave the writing to Vitals. Nothing in it leaves your Mac.
How the figures are written
- Times are seconds since 1970, in UTC.
datetime(start, 'unixepoch', 'localtime')turns one into your own time. - Every column says its unit in its name: bytes, seconds, percent, celsius, watts.
- Percentages run from 0 to 100. For the Mac’s CPU that is of all cores.
- A reading your Mac does not give, such as fan speed on a Mac without fans, is left empty.
The tables
readingsHow hard the Mac was pushed, a row every five minutes: the average and the highest CPU, memory, memory pressure, GPU, Neural Engine, temperature, fan speed and power.system_hoursWhat the whole Mac used, a row an hour: CPU, memory, network, disk and energy.system_five_minutesThe same, a row every five minutes, for the last two days.system_minutesThe same, a row a minute, for the last three hours.app_daysWhat each app used, a row for each app each day.app_hoursThe same by the hour, for the last two days.
readingsstart, seconds, cpu_percent_average, cpu_percent_peak, memory_used_bytes_average, memory_used_bytes_peak, memory_pressure_percent_average, memory_pressure_percent_peak, memory_pressure_level_peak, swap_used_bytes_peak, gpu_percent_average, gpu_percent_peak, neural_engine_percent_average, neural_engine_percent_peak, cpu_celsius_average, cpu_celsius_peak, hottest_celsius_average, hottest_celsius_peak, fan_rpm_average, fan_rpm_peak, power_watts_average, power_watts_peak, thermal_state_peak, battery_percent, plugged_in_seconds
system_hours, system_five_minutes, system_minutesstart, seconds, cpu_load_seconds, memory_byte_seconds, network_bytes_in, network_bytes_out, disk_bytes_read, disk_bytes_written, energy_joules
app_days, app_hoursstart, app_id, name, kind, bundle_path, seconds, cpu_seconds, energy_joules, memory_byte_seconds, peak_memory_bytes, network_bytes_in, network_bytes_out, disk_bytes_read, disk_bytes_written
Queries to start from
The ten hottest five minutes of the last week
SELECT datetime(start, 'unixepoch', 'localtime') AS time,
round(cpu_celsius_peak) AS celsius,
round(cpu_percent_peak) AS cpu
FROM readings
WHERE start > strftime('%s', 'now', '-7 days')
ORDER BY cpu_celsius_peak DESC
LIMIT 10; When memory was under pressure
SELECT datetime(start, 'unixepoch', 'localtime') AS time,
memory_pressure_level_peak AS pressure,
round(memory_used_bytes_peak / 1073741824.0, 1) AS gb
FROM readings
WHERE memory_pressure_level_peak != 'normal'
ORDER BY start DESC
LIMIT 20; The apps that used the most energy in the last 30 days
SELECT name, round(sum(energy_joules) / 3600, 1) AS watt_hours
FROM app_days
WHERE start > strftime('%s', 'now', '-30 days')
GROUP BY name
ORDER BY watt_hours DESC
LIMIT 10; How long it is kept
For 30 days, unless you choose longer in Settings → General → Keep History For: 90 days, 6 months or 1 year. Delete History, on the same page, empties the file.
Without SQL
Export → Export CSV on the Overview saves the same figures as CSV files for a spreadsheet. And with Vitals connected to an AI assistant, you can ask in your own words when your Mac was at its limits.