• MYSQL三个默认库的介绍


    •  数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式。

      元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。

      INFORMATION_SCHEMA是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

      每位MySQL用户均有权访问这些表,但仅限于表中的特定行,在这类行中含有用户具有恰当访问权限的对象。

      现在很多人用phpmyadmin管理mysql数据库,有时候不想让普通用户通过phpmyadmin看到INFORMATION_SCHEMA数据库,可以设置一下

      在config.inc.php(有的是config.default.php)中设置这样一句

      $cfg['Servers'][$i]['hide_db'] = 'information_schema';

      SQLyog的设置方法:在设置用户名密码的时候,有个DataBase(s),在其中指定你需要访问的db就可以了。但这样就只能看一个,不知道如果在这里面使用“;”隔开会不会生效,没有试过。

      MySQL-front 的设置方法: 这种客户端如果不想看到这个“information_schema”,在设置的Login选项卡中,用户名密码的下面,也有一个DataBase,指定就可以了。

    • 数据库mysql:

      这个是mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。

    • 数据库performance_schema

      mysql5.5 版本 新增了一个性能优化的引擎: PERFORMANCE_SCHEMA这个功能默认是关闭的:
    需要设置参数: performance_schema  才可以启动该功能,这个参数是静态参数,只能写在my.cnf 中 不能动态修改。
      先看看有什么东西吧:
    mysql> use performance_schema;
    Database changed
    mysql> show tables ;
    +----------------------------------------------+
    | Tables_in_performance_schema                 |
    +----------------------------------------------+
    | cond_instances                               |
    | events_waits_current                         |
    | events_waits_history                         |
    | events_waits_history_long                    |
    | events_waits_summary_by_instance             |
    | events_waits_summary_by_thread_by_event_name |
    | events_waits_summary_global_by_event_name    |
    | file_instances                               |
    | file_summary_by_event_name                   |
    | file_summary_by_instance                     |
    | mutex_instances                              |
    | performance_timers                           |
    | rwlock_instances                             |
    | setup_consumers                              |
    | setup_instruments                            |
    | setup_timers                                 |
    | threads                                      |
    +----------------------------------------------+
    17 rows in set (0.00 sec)

    这里的数据表分为几类:

    1) setup table :  设置表,配置监控选项。

    2) current events table : 记录当前那些thread 正在发生什么事情。

    3) history table  发生的各种事件的历史记录表

    4) summary table  对各种事件的统计表

    5) 杂项表,乱七八糟表。

    setup 表:

    mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        -> WHERE TABLE_SCHEMA = 'performance_schema'
        -> AND TABLE_NAME LIKE 'setup%';
    +-------------------+
    | TABLE_NAME        |
    +-------------------+
    | setup_consumers   |
    | setup_instruments |
    | setup_timers      |
    +-------------------+


    setup_consumers 描述各种事件

    setup_instruments 描述这个数据库下的表名以及是否开启监控。

    setup_timers   描述 监控选项已经采样频率的时间间隔

    这个要多说一点 目前 performance-schema  只支持 'wait'  时间的监控,代码树上 wait/ 下的函数都可以监控到。

    文档上说了只有 'wait' 事件的检测,有没有其他的选项呢?

    看看源代码


    static row_setup_timers all_setup_timers_data[COUNT_SETUP_TIMERS]=
    {
      {
        { C_STRING_WITH_LEN("wait") },
        &wait_timer
      }
    };

    THR_LOCK table_setup_timers::m_table_lock;

    int table_setup_timers::update_row_values(TABLE *table,
                                              const unsigned char *,
                                              unsigned char *,
                                              Field **fields)
    {
      Field *f;
      longlong value;

      DBUG_ASSERT(m_row);

      for (; (f= *fields) ; fields++)
      {
        if (bitmap_is_set(table->write_set, f->field_index))
        {
          switch(f->field_index)
          {
          case 0: /* NAME */
            my_error(ER_WRONG_PERFSCHEMA_USAGE, MYF(0));
            return HA_ERR_WRONG_COMMAND;
          case 1: /* TIMER_NAME */
            value= get_field_enum(f);
            if ((value >= FIRST_TIMER_NAME) && (value <= LAST_TIMER_NAME))
              *(m_row->m_timer_name_ptr)= (enum_timer_name) value;
            else
              return HA_ERR_WRONG_COMMAND;
            break;
          default:
            DBUG_ASSERT(false);
          }
        }
      }

      return 0;
    }

    代码里写死了,只有 'wait' 一个值,不排除以后的版本会增加新的关键字,但至少目前就只有一个啦。
    并且这个表的name 字段是不允许修改的的。 下面的修改的方法里没有做任何处理,涉及到name字段的修改,直接报错。

    mysql> SELECT * FROM setup_timers;
    +------+------------+
    | NAME | TIMER_NAME |
    +------+------------+
    | wait | CYCLE      |
    +------+------------+
    只有 timer_name 可以update 这是一个enum 字段。

    性能事件表:

    mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        -> WHERE TABLE_SCHEMA = 'performance_schema'
        -> AND TABLE_NAME LIKE '%current';
    +----------------------+
    | TABLE_NAME           |
    +----------------------+
    | events_waits_current |
    +----------------------+

    记录当前正在发生的等待事件,这个表是只读的表,不能update ,delete ,但是可以truncate  

    具体字段是什么意思就自己去查doc 了,这里不说了。

    性能历史表:

    mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        -> WHERE TABLE_SCHEMA = 'performance_schema'
        -> AND (TABLE_NAME LIKE '%history' OR TABLE_NAME LIKE '%history_long');
    +---------------------------+
    | TABLE_NAME                |
    +---------------------------+
    | events_waits_history      |
    | events_waits_history_long |
    +---------------------------+

    这些表与前面的性能表的结构是一致的, history 表只保留每个线程(thread) 的最近的10个事件, history_long 记录最近的10000个事件。

    新事件如表,如果旧表满了,就会丢弃旧的数据,标准的先进先出(FIFO)  这俩表也是只读表,只能truncate

    事件汇总表:

    mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        -> WHERE TABLE_SCHEMA = 'performance_schema'
        -> AND TABLE_NAME LIKE '%summary%';
    +----------------------------------------------+
    | TABLE_NAME                                   |
    +----------------------------------------------+
    | events_waits_summary_by_instance             |
    | events_waits_summary_by_thread_by_event_name |
    | events_waits_summary_global_by_event_name    |
    | file_summary_by_event_name                   |
    | file_summary_by_instance                     |
    +----------------------------------------------+

    按照相关的标准对进行的事件统计表,
    events_waits_summary_global_by_event_name     在mysql5.5.7 以前叫: EVENTS_WAITS_SUMMARY_BY_EVENT_NAME

    表也是只读的,只能turcate
    performance  schema  instance 表:

    mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
        -> WHERE TABLE_SCHEMA = 'performance_schema'
        -> AND TABLE_NAME LIKE '%instances';
    +------------------+
    | TABLE_NAME       |
    +------------------+
    | cond_instances   |
    | file_instances   |
    | mutex_instances  |
    | rwlock_instances |
    +------------------+
    记录各种等待事件涉及到的实例  :  主要是3类:  cond  (容器? ) mutex (互斥锁) ,rwlock (读写锁)

    这表是只读的。
    乱七八糟表:

    mysql> SELECT * FROM performance_timers;
    +-------------+-----------------+------------------+----------------+
    | TIMER_NAME  | TIMER_FREQUENCY | TIMER_RESOLUTION | TIMER_OVERHEAD |
    +-------------+-----------------+------------------+----------------+
    | CYCLE       |      2389029850 |                1 |             72 |
    | NANOSECOND  |            NULL |             NULL |           NULL |
    | MICROSECOND |         1000000 |                1 |            585 |
    | MILLISECOND |            1035 |                1 |            738 |
    | TICK        |             101 |                1 |            630 |
    +-------------+-----------------+------------------+----------------+

    这个表式只读表,记录了事件采样频率的设定,我们前面说的setup_timer 表的timer_name 只能区这4个中一个。
    mysql> SELECT * FROM threads;
    +-----------+----------------+----------------------------------------+
    | THREAD_ID | PROCESSLIST_ID | NAME                                   |
    +-----------+----------------+----------------------------------------+
    |         0 |              0 | thread/sql/main                        |
    |         1 |              0 | thread/innodb/io_handler_thread        |
    |        16 |              0 | thread/sql/signal_handler              |
    |        23 |              7 | thread/sql/one_connection              |
    |         5 |              0 | thread/innodb/io_handler_thread        |
    |        12 |              0 | thread/innodb/srv_lock_timeout_thread  |
    |        22 |              6 | thread/sql/one_connection              |

    这个表记录了系统里当前存在的各种线程。
    下面就是 涉及到performance_schema的各个系统参数了:

    mysql> SHOW VARIABLES LIKE 'perf%';
    +---------------------------------------------------+---------+
    | Variable_name                                     | Value   |
    +---------------------------------------------------+---------+
    | performance_schema                                | ON      |
    | performance_schema_events_waits_history_long_size | 10000   |
    | performance_schema_events_waits_history_size      | 10      |
    | performance_schema_max_cond_classes               | 80      |
    | performance_schema_max_cond_instances             | 1000    |
    | performance_schema_max_file_classes               | 50      |
    | performance_schema_max_file_handles               | 32768   |
    | performance_schema_max_file_instances             | 10000   |
    | performance_schema_max_mutex_classes              | 200     |
    | performance_schema_max_mutex_instances            | 1000000 |
    | performance_schema_max_rwlock_classes             | 30      |
    | performance_schema_max_rwlock_instances           | 1000000 |
    | performance_schema_max_table_handles              | 100000  |
    | performance_schema_max_table_instances            | 50000   |
    | performance_schema_max_thread_classes             | 50      |
    | performance_schema_max_thread_instances           | 1000    |
    +---------------------------------------------------+---------+
    涉及到系统状态的参数:
    mysql> SHOW STATUS LIKE 'perf%';
    +------------------------------------------+-------+
    | Variable_name                            | Value |
    +------------------------------------------+-------+
    | Performance_schema_cond_classes_lost     | 0     |
    | Performance_schema_cond_instances_lost   | 0     |
    | Performance_schema_file_classes_lost     | 0     |
    | Performance_schema_file_handles_lost     | 0     |
    | Performance_schema_file_instances_lost   | 0     |
    | Performance_schema_locker_lost           | 0     |
    | Performance_schema_mutex_classes_lost    | 0     |
    | Performance_schema_mutex_instances_lost  | 0     |
    | Performance_schema_rwlock_classes_lost   | 0     |
    | Performance_schema_rwlock_instances_lost | 0     |
    | Performance_schema_table_handles_lost    | 0     |
    | Performance_schema_table_instances_lost  | 0     |
    | Performance_schema_thread_classes_lost   | 0     |
    | Performance_schema_thread_instances_lost | 0     |
    +------------------------------------------+-------+

    Live together,or Die alone!
  • 相关阅读:
    springmvc的控制器是不是单例模式,如果是,有什么问题,怎么解决?
    数据库中的锁机制
    在inux中安装redis的时候,会出现下面的这个异常
    使用SecureCRT操作linux系统时候的简单设置
    装饰者设计模式
    java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone.
    事务
    2.6.1 测试架构师
    测试专家讲述通往测试架构师之路
    什么是软件测试架构师
  • 原文地址:https://www.cnblogs.com/HondaHsu/p/4311650.html
Copyright © 2020-2023  润新知