10月 17

mysql的缓存使用

张子萌[2010-10-17]

1。在配置文件中添加配置

query_cache_size = 24M
query_cache_type = 1 #0不缓存
#1 缓存所有的结果,除了 SELECT SQL_NO_CACHE … 查询
#2 仅缓存 SELECT SQL_CACHE … 查询
query_cache_limit = 1048576 #不缓存大于这个值的结果。(缺省为 1M)

2。添加完毕重启mysql数据库

3。登陆mysql数据库查看缓存设置情况

mysql > show variables like ‘%query%’;

have_query_cache 缓存是否可用
long_query_time 超过N秒才记录
query_alloc_block_size 缓存分配的块大小(推荐4096为4k)
query_cache_limit 指示每个查询结果集最大的缓存限制,超过这个值的结果集不缓存
query_cache_min_res_unit 被分配给缓存的最小的块的数量
query_prealloc_size 被缓存用于解析和执行的持久buffer的大小
query_cache_size 缓存的大小

4。查看mysql数据库缓存使用情况

mysql > show status like ‘Qcache%’;

Qcache_free_blocks 查询缓存中的空闲内存块的数目
Qcache_free_memory 查询缓存的空闲内存总数
Qcache_hits 缓存采样数数目
Qcache_inserts 被加入到缓存中的查询数目
Qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目
Qcache_not_cached 没有被缓存的查询数目
Qcache_queries_in_cache 在缓存中已注册的查询数目
Qcache_total_blocks 查询缓存中的块的总数目

5。维护部分

5.1
查询缓存碎片率 Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过20%
flush query cache 整理缓存碎片

5.2
查询缓存利用率 (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
如果利用率在25%以下,则是query_cache_size设置的过大。

5.3
查询缓存命中率 (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

5.4
刷新缓存状态
flush status

5.5
重启缓存服务
reset query cache

9月 17

ORACLE 重建过度占用的空间

[整理人:张子萌]
数据库的undotbs或临时空间占用过太(自动扩展造成),磁盘空间有点紧,所以先考虑重建一下环节压力。

创建新的UNDO表空间

1)创建新的undo空间
SQL> CREATE UNDO
TABLESPACE UNDOTBS2
DATAFILE ‘/u02/UNDOTBS2.dbf’ SIZE 2048M
AUTOEXTEND
ON NEXT 10M MAXSIZE UNLIMITED ;
2)切换使用新的undo空间
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2;
3)删除原始的undo空间
SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

重建临时表空间

1)创建新的临时表空间
SQL> CREATE temporary
TABLESPACE TEMP2
TEMPFILE ‘/u02/temp2.DBF’ SIZE 512M
REUSE AUTOEXTEND
ON NEXT 1M MAXSIZE UNLIMITED;
2) 改变缺省临时表空间
SQL> ALTER DATABASE DEFAULT temporary TABLESPACE TEMP2;
3)删除原来临时表空间
SQL> DROP TABLESPACE TEMP1 INCLUDING CONTENTS AND DATAFILES;

8月 19

MySql日常操作记录

[整理日:2010-08-19]

1)使用innodb引擎独立表空间,在配置文件my.cnf中添加如下,重启数据库。
[mysqld]
innodb_file_per_table

2)Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:
alter table TableName engine=innodb

OPTIMIZE TABLE TableName;

3)改变现有的表使用的存储引擎,用以下语句:
ALTER TABLE mytable ENGINE = MyISAM

4)设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。重启mysql服务器

5)查看当前进程和执行sql

show processlist ;

6) 清除30天前的 binlog
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 30 DAY);

7)自动清理30天前的binlog

在配置文件中添加expire_logs_days = 30

4月 09

忘记 mysql 密码

1. 先结束mysql 进程

# killall mysqld

2. 用mysql 安全模式运行并跳过权限难

# mysqld_safe –skip-grant-tables

3. 用root 登录 ,此时不需要密码

# mysql -u root

4. 现在开始修改密码了

mysql> use mysql;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> update user set Password = PASSWORD(‘your new password’) where User = ‘root’ ;

Query OK, 2 rows affected (0.02 sec)

Rows matched: 2 Changed: 2 Warnings: 0

mysql> flush privileges;

mysql> quit

Bye