mysql的一些优化
Mysql使用经验[转]目前项目性能指标是20万用户,20并发。用的是Mysql,但是总感觉性能很差,今天上网查了一下,发现的确没有好好的调整一下性能。先引用一个wiki,改天调整一下看看。[原文]同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。 安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-
关于执行计划里recursive calls,db block gets和consistent gets参数的解释
我们在实际工作中经常要看某个sql语句的执行计划,例如:在sqlplus使用命令SET AUTOTRACE ON后,执行计划显示如下:SELECT STATEMENT Optimizer=ALL_ROWS (Cost=985 Card=1 Bytes=26)Statistics----------------------------------------------------------35 recursive calls0 db block gets1052 consistent gets7168 physical reads0 redo size395 bytes sent via SQL*Net to client512 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processed其中recursive calls,
使用dbv和RMAN检查数据文件中的坏块
1.使用dbv检查D:oradataeygle>dbv file=EYGLE.DBF blocksize=8192 DBVERIFY: Release 10.1.0.4.0 - Production on 星期六 6月 11 17:36:37 2005 Copyright (c) 1982, 2004, Oracle. All rights reserved. DBVERIFY - 开始验证: FILE = EYGLE.DBF 页 219 标记为损坏 Corrupt block relative dba: 0x010000db (file 4, block 219) Bad check value found during dbv: Data in bad block: type: 6 format: 2 rdba: 0x010000db last change scn: 0x0000.0005ee6d seq: 0x2 flg: 0x04 spare1: 0x0 spare2: 0x0 spare3:
ITL的含义
是Interesting Transaction List的缩写 是block 中关于事务信息的记录(包括list编号、回滚段地址、事务状态、事务在该block影响的记录条数等)ITL 是 consistents reads 的基础,根据ITL 才能去回滚段中找变化前的数据大事务才某些少量特定条件下可能ITL没有被及时更新为提交状态,需要 延迟块清除,这样才能让 让进程识别到底是否需要去回滚段中获取变化前数据。所以说ITL 的不同步更新 导致 delay block cleanout单就写日志,是不会产生scn的[@more@]
一致读( consistent read )的步骤
一致读( consistent read )的步骤 =========================================================== 作者: grassbell(http://grassbell.itpub.net)发表于: 2004.09.27 15:12分类: Oracle 出处: http://grassbell.itpub.net/post/26/2507--------------------------------------------------------------- 摘自http://www.itpub.net/131231.html 。不知道具体出处,拿来参考。1. Read the Data Block. 2. Read the Row Header. 3. Check the Lock Byte to determine whether there's an ITL entry. 4. Read the ITL entry to determine the T
删除表空间,有rman全备的恢复(使用dbms_backup_restore来进行恢复)
删除表空间,有rman全备的恢复 错删除表空间,有rman全备的恢复错删除表空间,有rman全备的恢复1.生成测试数据SQL> startupORACLE 例程已经启动。Total System Global Area 105978600 bytesFixed Size 453352 bytesVariable Size 79691776 bytesDatabase Buffers 25165824 bytesRedo Buffers 667648 bytes数据库装载完毕。数据库已经打开。SQL> select * from a;select * from a*ERROR 位于第 1 行:ORA-00942: 表或视图不存在已用时间: 00: 00: 00.00SQL> create table a (a int) tablespace users;表已创建。已用时间: 00: 00: 00.
用rman在线恢复表空间
前提是已经用rman备份好了数据!!1.alter tablespace dzy offline immediate; 使表空间offline2.rman target /进入rman3.restore dzy;4.recover dzy;5.alter tablespace dzy online;再测试数据查询恢复的数据!!这个用于某个表空间坏了或什么的!!http://www.cublog.cn/u/20140/showart.php?id=126027(这个是误删除标空间)SQL> alter tablespace dzy offline immediate;Tablespace altered.SQL> drop tablespace dzy including contents;Tablespace dropped.[@more@]
oracle的md5加密
create or replace function md5(input_string VARCHAR2) return varchar2ISraw_input RAW(128) := UTL_RAW.CAST_TO_RAW(input_string);decrypted_raw RAW(2048);error_in_input_buffer_length EXCEPTION;BEGINsys.dbms_obfuscation_toolkit.MD5(input => raw_input, checksum => decrypted_raw);return lower(rawtohex(decrypted_raw));END;[@more@]
获取某张表的表结构
今天看来yangtingkun的获取表结构,发现在10g里不能dbms_output.put_line不能把表结构全部显示出来(就是设置dbms_output.enable(10000都不能显示完)),觉得不很方便,我稍微改进了一下,可以获取表结构,并可以直接执行该sql文件,建立该表!$cat gettabledefine.sh#!/bin/bashsqlplus $1/$2<<EOFset serveroutput on size 10000spool tabledefine.tmpexecute P_TEST('$3');spool offexitEOFaparm="CREATE TABLE $1."echo $aparmawk 'NF>0' /home/oracle/dmp/tabledefine.tmp|grep -v "SQL>"|grep -v "PL/S
yangtingkun发现的bug
http://yangtingkun.itpub.net/category/468/7627[@more@]
UTL_FILE包的简单例子
看了yangtingkun的这个帖子,我做了一下改进,加入了域分隔符和行结尾符GRANT READ[,WRITE] ON DIRECTORY directory TO username;)SQL> CREATE DIRECTORY D_OUTPUT AS 'E:';目录已创建。CREATE OR REPLACE PROCEDURE P_WRITE_FILE(P_TABLE_NAME IN VARCHAR2,P_COLUMN_LIST IN VARCHAR2 DEFAULT NULL,P_WHERE_STR IN VARCHAR2 DEFAULT NULL,P_SEP IN VARCHAR2, --域分隔符P_END IN VARCHAR2 --行结尾符) ASV_FILE UTL_FILE.FILE_TYPE;V_BUFFER VARCHAR2(32767);V_RESULT VARCHAR2(32767);C_RESULT SYS_REFCURSOR;--c_a char(1);BEGINV_FIL
通过触发器复制包含LONG类型的表
上个月有人问我这个long的表是建立触发器的问题,结果在这里找到了:前两天论坛上有人问如何才能通过触发器来实现对包含LONG或LONG RAW类型字段的表的复制。给他做了个最简单的例子,在这里记录一下。由于在触发器中不能对LONG或LONG RAW类型的字段进行引用,所以原本最简单的方式直接将:NEW.COL插入到新表的方法无法奏效,必须采用其他方法解决。SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, COMMENTS LONG RAW);表已创建。SQL> CREATE TABLE T1 (ID NUMBER PRIMARY KEY, COMMENTS BLOB);表已创建。SQL> CREATE OR REPLACE TRIGG
oracle10g支持正则表达式
Oracle 8 和Oracle 9i中缺乏灵活性的SQL 正则表达式最终在Oracle 10g中得到了解决。Oracle 数据库目前内建了符合POSIX 标准的正则表达式。 四个新的函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和 REGEXP_REPLACE。它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。 POSIX 正则表达式由标准的元字符(metacharacters)所构成:'^' 表示字符串的开始 '$' 表示字符串的结束 '.' 表示任何字符 字符的范围,比如说'[a-z]',表示任
使用SQL*PLUS,构建完美excel或html输出
今天看了eygle的一个"使用SQL*PLUS,构建完美excel或html输出",用来把表结构输出到excel或者html里,发现很有用:set linesize 200 set term off verify off feedback off pagesize 999 set markup html on entmap ON spool on preformat offspool table.xlsselect A.Table_Name,A.column_name 字段名,A.data_type||'('||A.data_length||')' 数据类型和长度,A.data_precision 整数位,A.Data_Scale 小数位,A.nullable 允许空值,A.Data_default 缺省值,B.comments 备注 from user_tab_columns A,user_col_comments Bwhere A.Table_Na
yangtingkun的blog索引
http://www.itpub.net/showthread.php?s=&threadid=699527[@more@]
dbms_stats
http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_stats2.htm#1003995SQL> exec dbms_stats.GATHER_SCHEMA_STATS(ownname=>'sxitismg',method_opt=>'for all indexed columns',options=>'GATHER',cascade=>TRUE);SQL>execute dbms_stats.gather_schema_stats(ownname => ‘scott’,estimate_percent => 20,method_opt=>‘for all indexed columns size 10’, cascade=>true);exec dbms_stats.GATHER_SCHEMA_STATS(ownname=>'scott',method_opt=>'for all indexed columns',op