Difference between revisions of "Mythfilldatabase"

From MythTV Official Wiki
Jump to: navigation, search
(Add information on configuration with xmltv)
(54 intermediate revisions by 24 users not shown)
Line 1: Line 1:
{{Cleanup}}
 
 
{{Wrongtitle|mythfilldatabase}}
 
{{Wrongtitle|mythfilldatabase}}
= About =
+
{{UpToDate 0.28}}
'''mythfilldatabase''' fills the Myth programs table with upcoming shows.
 
  
= Manual use of mythfilldatabase =
+
==Introduction==
 +
'''mythfilldatabase''' fills the Myth database [[program table]] with upcoming shows. It downloads data from schedule providers and loads channel names and program details into the MythTV database.
  
== Command Line Options ==
+
There are two data formats supported.
--manual
+
# ''Data Direct'' format is an older format that is supported but not recommended. Only one provider of schedules information, ''Schedules Direct'' supports this format and only for USA TV programs. Since Schedules Direct now also supports XMLTV format, and provides better data that way, that is to be preferred.
  Run in manual channel configuration mode
+
# [[XMLTV]] format is supported by many providers for many countries.
  This will ask you questions about every channel
 
  
--update
+
==Setup==
  For running non-destructive updates on the database for
+
When running mythtv-setup, the [[Setup Video Sources]] section will configure information necessary for running mythfilldatabase. The [[Setup General#Program Schedule Downloading Options|Program Schedule Downloading Options]] section of Setup General tells the mythtv backend whether to run mythfilldatabase, when to run it and what parameters to use.
  users in xmltv zones that do not provide channel data
 
  For example, to update two datasources with a single xmltv file, use :
 
      mythfilldatabase --update --file 1 -1 tvguide.xml
 
      mythfilldatabase --update --file 2 -1 tvguide.xml
 
  See below for help about  --file.
 
  
--preset
+
==Running==
  Use it in case that you want to assign a preset number for
+
If you set up the mythfilldatabase options in MythTV setup, the backend will run it once a day, based on your settings. When you are using [[XMLTV]], mythfilldatabase internally invokes the XMLTV grabber you have selected, downloads that data into a temporary file, then reads that data and processes it into the database.
  each channel, useful for non US countries where people
 
  are used to assigning a sequenced number for each channel, i.e.:
 
  1->TVE1(S41), 2->La 2(SE18), 3->TV3(21), 4->Canal 33(60)...
 
  
--no-delete
+
If you prefer, you can uncheck ''Automatically update program listings'' in setup, and use any method you prefer to run mythfilldatabase once a day (e.g. cron, anacron). You can also do a manual run, even if you already ran it that day, at any time. For example if your daily run failed, or you just added some new channels, you can run it manually to get the latest schedules updated.
  Do not delete old programs from the database until 7 days old.
 
  
--file <sourceid> <offset> <xmlfile>
+
==Memory Usage==
  Bypass the grabbers and read data directly from a file
+
When using XMLTV, mythfilldatabase can use a lot of main memory. If you have 200 or more channels and you are processing 21 days of schedules it can use 5 GB of resident memory. If your backend only has 4 GB of memory this will start swapping, causing mythfilldatabase to take a very long time and possibly causing recordings to fail. You should do a manual run of mythfilldatabase and watch the memory usage using top to determine if you have a problem. This is particularly true if you previously used the Data Direct format, which does not have this problem.
  <sourceid> = number for the video source to use with this file
 
  <offset>  = days from today that xmlfile defines
 
                (-1 means to replace all data, up to 10 days)
 
  <xmlfile>  = file to read
 
  
--dd-file <sourceid> <offset> <lineupid> <xmlfile>
+
To reduce the memory usage, you can run a few days of data at a time. I have found that running 3 days of data at a time uses around 500 MB of main memory. To achieve this you will need to set up a script that calls the xmltv grabber and mythfilldatabase repeatedly. Instead of having mythfilldatabase call the grabber internally you will do that in the script. You can name this script in the backend setup so that the backend calls it automatically every day. See the following example. It is very important to get the correct SOURCEID. See [[#Find out the source id of your card]].
  <sourceid> = see --file
 
  <offset>  = see --file
 
  <lineupid> = the lineup id
 
  <xmlfile>  = see --file
 
  
--xawchannels <sourceid> <xawtvrcfile>
+
<pre>
  (--manual flag works in combination with this)
+
#!/bin/bash
  Read channels as defined in xawtvrc file given
+
SOURCEID=2
  <sourceid>    = cardinput
+
grabber="tv_grab_zz_sdjson_sqlite"
  <xawtvrcfile> = file to read
+
rm -f /tmp/tv_grab_off*.xml
 +
for (( offset = 0; offset < 20; offset += 3 )) ; do
 +
    "$grabber" --days 3 --offset $offset > /tmp/tv_grab_off$offset.xml
 +
    mythfilldatabase --file --sourceid $SOURCEID --xmlfile /tmp/tv_grab_off$offset.xml
 +
done
 +
</pre>
  
--do_channel_updates
+
==Channels==
  When using DataDirect, ask mythfilldatabase to
+
By default, mythfilldatabase will add or update channels that are included in the input file if the tuner type supports it. That is any tuner that does not scan for channels. If you have previously added channels from a different grabber or manually, this may create duplicate channels. In many cases having it add the channels for you is convenient and avoids a lot of manual work. If you find it has duplicated channels you can use ''Delete All'' from [[Setup Channel Editor]] to delete all the channels and allow mythfilldatabase to add them. You can override this behavior in mythfilldatabase with the ''--only-update-guide'' option, in which case you will have to set up your channels manually.
  overwrite channel names, frequencies, etc. with the
 
  values available from the data source. This will
 
  override custom channel names, which is why it is
 
  off by default.
 
  This may manage to fix a corrupted channel lineup.
 
  
--remove-new-channels
+
If you have a tuner that scans for channels or you use the ''--only-update-guide'' option, you will have to set up your channels manually using [[Setup Channel Editor]] and/or the channel editor in mythweb. The channel editor in mythweb is easier to use but does not allow adding channels. You need to enter the ''xmltv id'' for each channel in a format that corresponds with the xmltv id in the download file.
  When using DataDirect, ask mythfilldatabase to
 
  remove new channels (those not in the database)
 
  from the DataDirect lineup. These channels are
 
  removed from the lineup as if you had done so
 
  via the DataDirect website's Lineup Wizard, but
 
  may be re-added manually and incorporated into
 
  MythTV by running mythfilldatabase without this
 
  option.  New channels are automatically removed
 
  for DVB and HDTV sources that use DataDirect.
 
  
--graboptions <"options">
+
== Command line options ==
  Pass options to grabber
+
<pre>
 +
~$ mythfilldatabase -h
 +
mythfilldatabase version: mythtv-fixes/0.28 [v0.28-42-g63477ef] www.mythtv.org
 +
Misc. Options:
 +
--dd-file                      Bypass grabber, and read SD data from file
 +
  --lineupid                      DataDirect lineup of input xml file
 +
  --offset                        Day offset of input xml file
 +
  --xmlfile                      XML file to import manually
 +
--dd-grab-all                  refresh full data using DataDirect
 +
--file                          Bypass grabbers and define sourceid and file
 +
  --xmlfile                      XML file to import manually
 +
--manual                        Run interactive configuration
 +
--no-mark-repeats              do not mark repeats
 +
--preset                        Use channel preset values instead of numbers
 +
-h OR --help OR --usage        Display this help printout, or give detailed information of selected option.
 +
--version                      Display version information.
 +
--sourceid                      Operate on single source
  
--sourceid <number>
+
Channel List Handling Options:
   Only refresh data for sourceid given
+
--do-channel-updates            update channels using datadirect
 +
--do-not-filter-new-channels   don't filter ATSC channels for addition
 +
--only-update-channels          only update channel lineup
 +
--remove-new-channels          disable new channels on datadirect web interface
  
--max-days <number>
+
Filtering Options:
  Force the maximum number of days, counting today,
+
--dont-refresh-tba              don't refresh "To be announced" programs
  for the grabber to check for future listings
+
--max-days                     force number of days to update
--only-update-channels
+
--refresh                      Provide a day or range of days to refresh. Can be used repeatedly.
  Get as little listings data as possible to update channels
 
--refresh-today
 
  
--refresh-second
+
Logging Options:
 +
--enable-dblog                  Enable logging to database.
 +
--loglevel                      Set the logging level.  All log messages at lower levels will be discarded.
 +
                                In descending order: emerg, alert, crit, err, warning, notice, info, debug
 +
                                defaults to info
 +
--logpath                      Writes logging messages to a file in the directory logpath with filenames in the format:
 +
                                applicationName.date.pid.log.
 +
                                This is typically used in combination with --daemon, and if used in combination with --pidfile, this
 +
                                can be used with log rotators, using the HUP call to inform MythTV to reload the file
 +
-q OR --quiet                  Don't log to the console (-q).  Don't log anywhere (-q -q)
 +
--syslog                        Set the syslog logging facility.
 +
                                Set to "none" to disable, defaults to none.
 +
-v OR --verbose                Specify log filtering. Use '-v help' for level info.
  
--refresh-all
+
Guide Data Handling Options:
  (Only valid for grabbers: DataDirect, se_swedb, no, ee, de_tvtoday)
+
--only-update-guide            Only update guide data
  Force a refresh today or two days (or every day) from now,
 
  to catch the latest changes.
 
  These may be used to attempt to fix corrupted program guide data.
 
--dont-refresh-tomorrow
 
  Tomorrow will always be refreshed unless this argument is used
 
--dont-refresh-tba
 
  "To be announced" programs will always be refreshed
 
  unless this argument is used
 
  
--export-icon-map [<filename>]
+
</pre>
  Exports your current icon map to <filename> (default: iconmap.xml)
 
--import-icon-map [<filename>]
 
  Imports an icon map from <filename> (default: iconmap.xml)
 
--update-icon-map
 
  Updates icon map icons only
 
--reset-icon-map [all]
 
  Resets your icon map (pass all to reset channel icons as well)
 
 
 
--mark-repeats
 
  Marks any programs with a OriginalAirDate earlier
 
  than their start date as a repeat
 
 
 
-v or --verbose debug-level
 
  Use '-v help' for level info
 
 
 
--help
 
  This text
 
 
 
 
 
  --manual and --update can not be used together.
 
  
 
== External XMLTV ==
 
== External XMLTV ==
If you are in a country where mythfilldatabase will not work the normal way you will need to use the --file flag (e.g. XMLTV does not have a grabber included, or the grabber options are not fully supported by MythTV).
+
{{note_box|The following steps are '''only required''' if you are using a grabber which does not comply to the baseline specification-  i.e. It is '''not xmltv compliant'''. If possible inform the grabber author that their script does not comply with the standard so that they may fix it.}}
 +
If you are using a non-compliant XMLTV grabber where mythfilldatabase will not automatically work in the normal way you will need to use the --file flag.
  
=== 1. Obtain xml file of tv guide ===
+
=== Obtain xml file of tv guide ===
  
 
Here in Belgium, I use [http://pytvgrab.sourceforge.net pytvgrab] to get my tv guide and output to an xml file:
 
Here in Belgium, I use [http://pytvgrab.sourceforge.net pytvgrab] to get my tv guide and output to an xml file:
Line 126: Line 100:
 
</nowiki></pre>
 
</nowiki></pre>
  
=== 2. Find out the source id of your card ===
+
=== Find out the source id of your card ===
  
 
This is normally '1' if you have only one input card, but it is best to check it out because I have found if I have run mythtv setup more than once it can end up being something other than 1. To check, you need to look at the database:
 
This is normally '1' if you have only one input card, but it is best to check it out because I have found if I have run mythtv setup more than once it can end up being something other than 1. To check, you need to look at the database:
Line 132: Line 106:
 
<pre><nowiki>
 
<pre><nowiki>
 
$ mysql -u root mythconverg
 
$ mysql -u root mythconverg
mysql> select * from cardinput\G
+
mysql> select * from videosource;
cardinputid
+
+----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+
cardid
+
| sourceid | name | xmltvgrabber  | userid | freqtable | lineupid  | password | useeit | configpath | dvb_nit_id |
sourceid=4
+
+----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+
etc.
+
|        2 | SD  | tv_grab_na_sd |        | default  | MA20453:X | NULL    |      0 | NULL      |        -1 |
</nowiki></pre>
+
+----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+
 
+
1 row in set (0.00 sec)
Remember the source id
 
 
 
=== 3. Run mythfilldatabase with the --file flag ===
 
 
 
The -1 means to replace all data, belgium.xml is the file name for the output of the grabber as above:
 
<pre><nowiki>
 
$ mythfilldatabase --file <sourceid> -1 belgium.xml
 
 
</nowiki></pre>
 
</nowiki></pre>
The first time you will need to use the --manual flag, but this is better explained on the [[XmlTv]] page.
+
This shows all of your sources and the id's.
 +
Remember the source id.
  
== Troubleshooting ==
+
You may need to do multiple runs, e.g. one run with --sourceid 1, and then second run with --sourceid 2.
=== 1. LinkSys or Fedora Core ===
+
{{Note box|Be very careful to use the correct sourceid. If you use the wrong one the system will go ahead and add channels and programs to an invalid source id that has not been set up. This will result in inconsistent results and failures.}}
I spent the past 3 weeks trying to troubleshoot a problem I was having with mythfilldatabase. I would run it and it would download between 5K and 3K and then just timeout.
 
  
I found this solution [http://www.gossamer-threads.com/lists/engine?do=post_view_flat;post=219553;page=1;sb=post_latest_reply;so=ASC;mh=25;list=mythtv http://www.gossamer-threads.com]
+
If you have run with an invalid source id, you will need to go into mythtv-setup and delete all of the incorrect channels that were created.
  
which says to do this:
+
Run mythfilldatabase as follows:
  
add this line in /etc/sysctl.conf
+
<pre>
 +
mythfilldatabase --file --sourceid <sourceid> --xmlfile belgium.xml
 +
</pre>
  
net.ipv4.tcp_window_scaling = 0
+
Before you run it the first time you will need to setup the grabber. This is explained on the [[XMLTV]] page.
  
execute sysctl -p /etc/sysctl.conf
+
== Troubleshooting ==
or restart your computer
 
  
Weeks of frustration fixedHope this helps someone.
+
=== mythfilldatabase causes the system to hang===
 +
This is probably an I/O saturation issuemythfilldatabase and [[MySQL]] can cause hard disk or ATA bus saturation, causing [[Mythbackend]] to starve. Older versions of MySQL would cause disk thrashing because of the use of write barriers. That could be solved by adding nobarrier to the /etc/fstab entry for the file system that holds your database (normally the root filesystem):
  
Note from a network techie.... Please be aware that disabling tcp window scaling has a system wide impact and will probably result in much slower bulk transfer speeds. Just thought you should be aware.
+
<code>UUID=900c3f88-ce0c-4a92-8e28-9ac04fdd1b09 / ext4 '''nobarrier''',errors=remount-ro 0 1</code>
  
=== 2. INSERT IGNORE INTO SQL Errors ===
+
Note that this could cause file system corruption if you have power failures or system crashes. If that is a concern you should move the databse to a separate file system. With recent versions of Linux and MySQL barriers no longer cause this problem.
If you find in mythfilldatabase's logs something like:
 
<pre>2006-11-21 22:33:22.474 DB Error (Inserting into program table):
 
Query was:
 
INSERT IGNORE INTO program (chanid, starttime, endtime, title, subtitle, description,
 
showtype, category, category_type, airdate, stars, previouslyshown, stereo, subtitled,
 
hdtv, closecaptioned, partnumber, parttotal, seriesid, originalairdate, colorcode,
 
syndicatedepisodenumber, programid) SELECT dd_v_program.chanid, DATE_ADD(starttime,
 
INTERVAL channel.tmoffset MINUTE), DATE_ADD(endtime, INTERVAL channel.tmoffset MINUTE),
 
title, subtitle, description, showtype, dd_genre.class, category_type, airdate, stars,
 
previouslyshown, stereo, subtitled, hdtv, closecaptioned, partnumber, parttotal, seriesid,
 
originalairdate, colorcode, syndicatedepisodenumber, dd_v_program.programid FROM (dd_v_program,
 
channel) LEFT JOIN dd_genre ON (dd_v_program.programid = dd_genre.programid AND
 
dd_genre.relevance = '0') WHERE dd_v_program.chanid = channel.chanid;
 
Driver error was [2/1105]:
 
QMYSQL3: Unable to execute query
 
Database error was:
 
Unknown error</pre>
 
  
It most likely means your database has become corrupted. To fix the corrupted database run the following command
+
This also be caused by excessive memory usage. See [[#Memory Usage|Memory Usage]] above.
<pre>mysqlcheck -r -u <username> -p <password> mythconverg</pre>
 
  
===3. mythfilldatabase causes the system to hang===
+
[[Category:MythTV Software]]
This is probably an I/O saturation issue.  mythfilldatabase and [[MySQL]] can cause hard disk or ATA bus saturation, causing [[Mythbackend]] to starve.  Read more about [[Troubleshooting:Mythfilldatabase_IO_bottleneck]].
 

Revision as of 16:40, 21 August 2016

Important.png Note: The correct title of this article is mythfilldatabase. It appears incorrectly here due to technical restrictions.

Software-update-available.png This page is up-to-date as of MythTV version 0.28, the current release is 34.0


Introduction

mythfilldatabase fills the Myth database program table with upcoming shows. It downloads data from schedule providers and loads channel names and program details into the MythTV database.

There are two data formats supported.

  1. Data Direct format is an older format that is supported but not recommended. Only one provider of schedules information, Schedules Direct supports this format and only for USA TV programs. Since Schedules Direct now also supports XMLTV format, and provides better data that way, that is to be preferred.
  2. XMLTV format is supported by many providers for many countries.

Setup

When running mythtv-setup, the Setup Video Sources section will configure information necessary for running mythfilldatabase. The Program Schedule Downloading Options section of Setup General tells the mythtv backend whether to run mythfilldatabase, when to run it and what parameters to use.

Running

If you set up the mythfilldatabase options in MythTV setup, the backend will run it once a day, based on your settings. When you are using XMLTV, mythfilldatabase internally invokes the XMLTV grabber you have selected, downloads that data into a temporary file, then reads that data and processes it into the database.

If you prefer, you can uncheck Automatically update program listings in setup, and use any method you prefer to run mythfilldatabase once a day (e.g. cron, anacron). You can also do a manual run, even if you already ran it that day, at any time. For example if your daily run failed, or you just added some new channels, you can run it manually to get the latest schedules updated.

Memory Usage

When using XMLTV, mythfilldatabase can use a lot of main memory. If you have 200 or more channels and you are processing 21 days of schedules it can use 5 GB of resident memory. If your backend only has 4 GB of memory this will start swapping, causing mythfilldatabase to take a very long time and possibly causing recordings to fail. You should do a manual run of mythfilldatabase and watch the memory usage using top to determine if you have a problem. This is particularly true if you previously used the Data Direct format, which does not have this problem.

To reduce the memory usage, you can run a few days of data at a time. I have found that running 3 days of data at a time uses around 500 MB of main memory. To achieve this you will need to set up a script that calls the xmltv grabber and mythfilldatabase repeatedly. Instead of having mythfilldatabase call the grabber internally you will do that in the script. You can name this script in the backend setup so that the backend calls it automatically every day. See the following example. It is very important to get the correct SOURCEID. See #Find out the source id of your card.

#!/bin/bash
SOURCEID=2
grabber="tv_grab_zz_sdjson_sqlite"
rm -f /tmp/tv_grab_off*.xml
for (( offset = 0; offset < 20; offset += 3 )) ; do
    "$grabber" --days 3 --offset $offset > /tmp/tv_grab_off$offset.xml
    mythfilldatabase --file --sourceid $SOURCEID --xmlfile /tmp/tv_grab_off$offset.xml
done

Channels

By default, mythfilldatabase will add or update channels that are included in the input file if the tuner type supports it. That is any tuner that does not scan for channels. If you have previously added channels from a different grabber or manually, this may create duplicate channels. In many cases having it add the channels for you is convenient and avoids a lot of manual work. If you find it has duplicated channels you can use Delete All from Setup Channel Editor to delete all the channels and allow mythfilldatabase to add them. You can override this behavior in mythfilldatabase with the --only-update-guide option, in which case you will have to set up your channels manually.

If you have a tuner that scans for channels or you use the --only-update-guide option, you will have to set up your channels manually using Setup Channel Editor and/or the channel editor in mythweb. The channel editor in mythweb is easier to use but does not allow adding channels. You need to enter the xmltv id for each channel in a format that corresponds with the xmltv id in the download file.

Command line options

~$ mythfilldatabase -h
mythfilldatabase version: mythtv-fixes/0.28 [v0.28-42-g63477ef] www.mythtv.org
Misc. Options:
--dd-file                       Bypass grabber, and read SD data from file
  --lineupid                      DataDirect lineup of input xml file
  --offset                        Day offset of input xml file
  --xmlfile                       XML file to import manually
--dd-grab-all                   refresh full data using DataDirect
--file                          Bypass grabbers and define sourceid and file
  --xmlfile                       XML file to import manually
--manual                        Run interactive configuration
--no-mark-repeats               do not mark repeats
--preset                        Use channel preset values instead of numbers
-h OR --help OR --usage         Display this help printout, or give detailed information of selected option.
--version                       Display version information.
--sourceid                      Operate on single source

Channel List Handling Options:
--do-channel-updates            update channels using datadirect
--do-not-filter-new-channels    don't filter ATSC channels for addition
--only-update-channels          only update channel lineup
--remove-new-channels           disable new channels on datadirect web interface

Filtering Options:
--dont-refresh-tba              don't refresh "To be announced" programs
--max-days                      force number of days to update
--refresh                       Provide a day or range of days to refresh. Can be used repeatedly.

Logging Options:
--enable-dblog                  Enable logging to database.
--loglevel                      Set the logging level.  All log messages at lower levels will be discarded.
                                In descending order: emerg, alert, crit, err, warning, notice, info, debug
                                defaults to info
--logpath                       Writes logging messages to a file in the directory logpath with filenames in the format:
                                applicationName.date.pid.log.
                                This is typically used in combination with --daemon, and if used in combination with --pidfile, this
                                can be used with log rotators, using the HUP call to inform MythTV to reload the file
-q OR --quiet                   Don't log to the console (-q).  Don't log anywhere (-q -q)
--syslog                        Set the syslog logging facility.
                                Set to "none" to disable, defaults to none.
-v OR --verbose                 Specify log filtering. Use '-v help' for level info.

Guide Data Handling Options:
--only-update-guide             Only update guide data

External XMLTV

Important.png Note: The following steps are only required if you are using a grabber which does not comply to the baseline specification- i.e. It is not xmltv compliant. If possible inform the grabber author that their script does not comply with the standard so that they may fix it.

If you are using a non-compliant XMLTV grabber where mythfilldatabase will not automatically work in the normal way you will need to use the --file flag.

Obtain xml file of tv guide

Here in Belgium, I use pytvgrab to get my tv guide and output to an xml file:

$ tv_grab_be_tvb --configure  (you only need this the first time)
$ tv_grab_be_tvb -o belgium.xml

Find out the source id of your card

This is normally '1' if you have only one input card, but it is best to check it out because I have found if I have run mythtv setup more than once it can end up being something other than 1. To check, you need to look at the database:

$ mysql -u root mythconverg
mysql> select * from videosource;
+----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+
| sourceid | name | xmltvgrabber  | userid | freqtable | lineupid  | password | useeit | configpath | dvb_nit_id |
+----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+
|        2 | SD   | tv_grab_na_sd |        | default   | MA20453:X | NULL     |      0 | NULL       |         -1 |
+----------+------+---------------+--------+-----------+-----------+----------+--------+------------+------------+
1 row in set (0.00 sec)

This shows all of your sources and the id's. Remember the source id.

You may need to do multiple runs, e.g. one run with --sourceid 1, and then second run with --sourceid 2.

Important.png Note: Be very careful to use the correct sourceid. If you use the wrong one the system will go ahead and add channels and programs to an invalid source id that has not been set up. This will result in inconsistent results and failures.

If you have run with an invalid source id, you will need to go into mythtv-setup and delete all of the incorrect channels that were created.

Run mythfilldatabase as follows:

mythfilldatabase --file --sourceid <sourceid> --xmlfile belgium.xml

Before you run it the first time you will need to setup the grabber. This is explained on the XMLTV page.

Troubleshooting

mythfilldatabase causes the system to hang

This is probably an I/O saturation issue. mythfilldatabase and MySQL can cause hard disk or ATA bus saturation, causing Mythbackend to starve. Older versions of MySQL would cause disk thrashing because of the use of write barriers. That could be solved by adding nobarrier to the /etc/fstab entry for the file system that holds your database (normally the root filesystem):

UUID=900c3f88-ce0c-4a92-8e28-9ac04fdd1b09 / ext4 nobarrier,errors=remount-ro 0 1

Note that this could cause file system corruption if you have power failures or system crashes. If that is a concern you should move the databse to a separate file system. With recent versions of Linux and MySQL barriers no longer cause this problem.

This also be caused by excessive memory usage. See Memory Usage above.