mysqlperformanceserver-configurationmysqladminmysqladministrator

difference between opened files and open files in mysql


In the below status i have opened files count to be '95349'. this value is increasing rapidly.

mysql> show global status like 'open_%';

Open_files = 721

Open_streams = 0

Open_table_definitions = 706

Open_tables = 741

Opened_files = 95349

Opened_table_definitions = 701

Opened_tables = 2851

also see this.

mysql>show variables like '%open%';

have_openssl = DISABLED

innodb_open_files = 300

open_files_limit = 8502

table_open_cache = 4096

and

max_connection = 300

is there any relation to open files and opened files. will there be any performance issues because of increasing opened_files value. This is a server of 8 GD RAM and 500 GB hardisk with processor: Intel(R) Xeon(R) CPU E3-1220 V2 @ 3.10GHz. It is a dedicated mysql server.

here for the command

ulimit -n;

1024 was the count

the server is hanging often. using some online tools i have optimised some parameters already. need to know what else should be optimized ? in what case the opened files count will reduce? is it necessary that opened files count should be with in some limit. if so how to find the appropriate limit for my server. if am not clear some where please help me by asking more questions.


Solution

  • Opened_files is a counter of how many times you have opened a table since the last time you restarted mysqld (see status variable Uptime for the number of seconds since last restart).

    Open_files is not a counter; it's the current number of open files.

    If your Opened_files counter is increasing rapidly, you may be able to gain improvement to performance by increasing the size of the table_open_cache.

    For some tips on the performance implications of this variable (and some cautions about setting it too high), see:


    Re your comments:

    You misunderstand the purpose of the counter. It always increases. It counts the number of times a particular operation has occurred since the last restart of mysqld. In this case, opening a file for a table.

    Having a high value in a counter isn't necessarily a problem. It could mean simply that your mysqld has been running for many days or weeks without a restart. So you have to look at that number compared to your Uptime (that is, MySQL status variable Uptime, not Linux uptime).

    What is more meaningful is the rate of increase of a counter, that is how fast does it grow in a given interval of time. That could indicate that you are re-opening tables rapidly.

    Normally, MySQL shouldn't have to re-open tables, because it retains an open table handle for each table. But it can only have a finite number of those. That's what table_open_cache is for. In your case, your MySQL instance can "remember" that it has already opened up to 4096 tables at a time. If you need another table opened, it closes one of the file descriptors and opens the table you requested.

    So if you have many thousands of tables (or partitions of tables) and you access a wide variety of them rapidly, you could see a lot of turnover in that table open cache. That would be indicated by the counter Opened_tables increasing rapidly.

    Therefore sizing the table_open_cache higher means that MySQL can retain more open table handles, and possibly decrease the rate of turnover.