BI
文章平均质量分 83
wzy0623
25年的数据库、数据仓库、大数据相关工作。《Hadoop构建数据仓库实践》、《HAWQ数据仓库与数据挖掘实战》、《SQL机器学习库——MADlib技术解析》、《MySQL高可用实践》、《Kettle构建Hadoop ETL》、《Greenplum构建实时数据仓库实践》作者。
展开
-
InnoDB缓冲池命中率(书摘备查)
通常InnoDB存储引擎的缓冲池的命中率不应该小于99%。缓冲池命中率 = (Innodb_buffer_pool_read_requests)/(Innodb_buffer_pool_read_requests + Innodb_buffer_pool_read_ahead + Innodb_buffer_pool_reads)平均每次读取的字节数 = Innodb_data_read/Inno原创 2016-12-28 13:23:39 · 5380 阅读 · 0 评论 -
加速MySQL的alter table操作(书摘备查)
MySQL的alter table性能在表很大的时候会出现问题。MySQL执行大部分更改操作都是新建一个需要的结构的空表,然后把所有老的数据插入到新表,最后删除旧表。这会耗费很多时间,尤其是在内存紧张,而表很大并有很多索引的时候。 不是所有的alter table操作都会导致重建表。例如,可以通过两种方式创建或去掉列的默认值(一种快、一种慢)。下面是较慢的方式:alter table film原创 2016-12-28 14:17:16 · 1486 阅读 · 0 评论 -
MySQl里类似Oracle rownum的实现
[sql] view plain copy-- dense rank,写法1 set @curr_cut:=0, @prev_cnt:=0, @rank:=0; select actor_id, @curr_cnt:=cnt as cnt, @rank:=if(@prev_cntas rank @prev_cnt:=@curr_cnt as d原创 2016-12-28 14:26:38 · 4195 阅读 · 1 评论 -
MySQL里用一个表的数据更新另一个表
MySQL的update语句里可以使用join,这在用一个表的数据更新另一个表时很方便,看下面一个统计点击数的例子:[sql] view plain copy-- 建立每天点击统计表 create table daily_hit_counter ( day date not null, slot tinyint unsigned not null, cnt int uns原创 2016-12-28 14:57:29 · 1404 阅读 · 0 评论 -
生成全局ID
对数据库表进行水平分割的时候,经常会遇到在不同的机器上生成全局唯一ID的问题。下面以MySQL为例介绍对于在不同机器上生成全局唯一ID的几个解决途径,其思想也适用于其他数据库系统。1. 使用auto_increment_increment和auto_increment_offset 假定有n个数据库,它们使用了auto_increment字段来取得唯一ID,为了保证n个数据库同时具备原创 2016-12-28 15:00:49 · 653 阅读 · 0 评论 -
存储过程实现递归算法
以经典的阶乘算法为例。Oracle:[sql] view plain copycreate or replace procedure factorial(n in number, b out number) is c_in number; c_out number; begin if n!=1 then c_in := n-1;原创 2016-12-28 15:08:59 · 6296 阅读 · 0 评论 -
日期差的天时分秒表示SQL
MySQL:[sql] view plain copySET @a:=UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(CURRENT_DATE()); SELECT CONCAT(IF(TRUNCATE(@a/24/3600,0)=0,'',CONCAT(TRUNCATE(@a/24/3600,0),'天')), IF(MOD(TR原创 2016-12-28 15:11:20 · 1271 阅读 · 0 评论 -
Oracle中文转拼音函数
最近两个项目都提出从中文转拼音的需求。我以前的做法是:从微软拼音输入法导出字库,建立中文拼音对照表,然后写一个函数从对照表查拼音。这种方法虽然思路简单,但是返回拼音的错误率太高,而且对每个字都要去查一遍3万记录的对照表,效率也不高。 这两天重新写了一个函数来完成此功能,该函数利用了Oracle提供的NLSSORT,具有以下特点:不需要中文字库 与数据库字符集无关 支持O...原创 2016-12-28 15:16:45 · 22127 阅读 · 18 评论 -
联机分析处理简介
联机分析处理(OLAP)的概念最早是由关系数据库之父E.F.Codd于1993年提出的。当时,Codd认为联机事务处理(OLTP)已不能满足终端用户对数据库查询分析的需要,SQL对大数据库进行的简单查询也不能满足用户分析的需求。用户的决策分析需要对关系数据库进行大量计算才能得到结果,E.F.codd提出了多维数据库和多维分析的概念,即OLAP。一、OLAP的概念 根据OLAP产品的实际应用情况和转载 2016-12-28 15:29:47 · 2753 阅读 · 0 评论 -
多维数据库
多维数据库(Multi Dimensional Database,MDD)可以简单地理解为:将数据存放在一个n维数组中,而不是像关系数据库那样以记录的形式存放。因此它存在大量稀疏矩阵,人们可以通过多维视图来观察数据。多维数据库增加了一个时间维,与关系数据库相比,它的优势在于可以提高数据处理速度,加快反应时间,提高查询效率。 目前有两种MDD 的OLAP产品:基于多维数据库的MOLAP和基于关系数转载 2016-12-28 15:31:19 · 995 阅读 · 0 评论 -
多维数据库概述之一---多维数据库的选择
1. 多维数据库简介多维数据库(Multi Dimesional Database,MDD)可以简单地理解为:将数据存放在一个n维数组中,而不是像关系数据库那样以记录的形式存放。因此它存在大量稀疏矩阵,人们可以通过多维视图来观察数据。多维数据库增加了一个时间维,与关系数据库相比,它的优势在于可以提高数据处理速度,加快反应时间,提高查询效率。MDD的信息是以数组形式存放的,所以它可以在不影响索引的情转载 2016-12-28 15:34:22 · 7690 阅读 · 0 评论 -
MySQL 分析和调整查询缓存的流程(书摘备查)
总的SELECT查询数 = Com_select + Qcache_hits + queries with errors found by parserCom_select = Qcache_inserts + Qcache_not_cached+ queries with errors found during the column-privileges check原创 2016-12-28 15:41:07 · 619 阅读 · 0 评论 -
Oracle里二进制与十进制的相互转换
Oracle里有内建函数bin_to_num可以将二进制数转换为十进制数,但这个函数的入参是个数不定的0或1:[sql] view plain copySELECT BIN_TO_NUM (1, 1, 1, 1, 0, 1, 1) FROM DUAL; 有时候入参使用一个二进制字符串会更加方便,另外Oracle本身没有提供num_to_bin这样将十进制转换成二进制的函数,于是写了两个自定义函原创 2016-12-28 15:44:35 · 8809 阅读 · 0 评论 -
MySQL内存相关的主要变量
一、查询缓存1. 查询缓存命中率计算公式:Qcache_hits/(Qcache_hits + Com_select)2. 状态变量Qcache_hits查询缓存命中数,即可以从查询缓存中直接返回结果的次数Qcache_not_cached不可缓存查询数,current_date等不确定函数或者查询结果大于query_cache_limit使得查询不可缓存Qcahce_inserts被加入缓存的查原创 2016-12-28 15:46:43 · 676 阅读 · 0 评论 -
云计算背后的秘密:NoSQL数据模型与CAP理论
数据模型 传统的数据库在数据模型方面,主要是关系型,它的特色是对Join类操作和ACID事务的支持。在NoSQL领域,主要有三种主流的数据模型: Column-oriented(列式) 列式也主要使用Table这样的模型,但是它并不支持类似Join这样多表的操作,它的主要特点是在存储数据时,主要围绕着“列(Column)”,而不是像传统的关系型数据库那样根据“行(Row)”进行存储,也就是说转载 2016-12-28 16:15:48 · 740 阅读 · 0 评论 -
ora-22992 通过DBLINK 访问远程CLOB表问题
在本地用select语句访问远程,如果远程表有CLOB字段的话则会有错:ora-22992;如果真的想看到clob字段的内容的话就得在本地建立一个表,用下面两条语句:我刚才试验insert into table select * from remote table成功remote table含有CLOB总结:在我的环境中成功(1)create table aaa select * from rem转载 2016-12-28 16:19:03 · 1493 阅读 · 0 评论 -
qcache_inserts com_select 与缓存命中率
高性能MySQL这本书中关于查询缓存有一段这样的描述: Cache invalidations can happen because of fragmentation, insufficient memory, ordata modifications. If you have allocated enough memory to the cache and tuned thequery_cach原创 2016-12-28 16:21:04 · 2226 阅读 · 0 评论 -
Oracle聚簇表使用方针
使用下面的方针决定是否使用聚簇表:经常被应用的连接语句访问的表可以使用聚簇表如果应用只是偶尔地使用表连接,或者频繁修改连接列的值,则不要使用聚簇表。修改一行的聚簇键值比修改非聚簇表的值花费更长的时间,因为Oracle可能为了维护聚簇而把被修改的行从一个块迁移到另一个块。如果应用经常对聚簇中的一个表进行全表扫描,则不要使用聚簇表。对聚簇表的全面扫描会比对非聚簇表的全表扫描花费更长的时间。因为表被存储翻译 2016-12-28 16:23:21 · 778 阅读 · 0 评论 -
利用Oracle dbms_pipe实现存储过程之间的通信
应用程序开发人员的需求是这样的:1. 根据条件给每一个国家的商品生成唯一7位随机代码,不同国家之间的商品代码可以相同2. 如果输入标准分隔符的字符串,则解析该字符串作为需要生成的商品ID,为其生成代码,否则为商品表中所有商品ID生成代码3. 代码的每一位要符合相应的规则,例如第一位的规则是[0123],则这位只能是0、1、2、3中的一个数4. 由于可能一次生成大量的代码,这个过程需要较长时间,所以原创 2016-12-28 16:29:10 · 2218 阅读 · 0 评论 -
Oracle 触发器中修改字段值
有个需求看着很简单,但也查了许多资料,还是记录下来。需求是这样的:根据一个表中的某些被修改的字段修改其它字段,用触发器实现。示例代码如下:CREATE TABLE t( ID INT, update_time DATE, other_col VARCHAR2(20));CREATE OR REPLACE TRIGGER trigger_on_t1_change原创 2016-12-28 16:32:03 · 7377 阅读 · 0 评论 -
星型和雪花型模式
什么是星型模式?可以将星型模式描述为一个简单的星型:中央表包含事实数据,多个表以中央表为中心呈放射状分布,它们通过数据库的主键和外键相互连接。 什么是雪花型模式?雪花型模式表示一种维度模型,该模型也是由一个中央事实表和一组成员维度表组成,这些维度表可进一步规范化为子维度表。 何时使用雪花型模式实施?数据仓库专家 Ralph Kimball 建议了三种情况,在这三种情况下,不仅可以使用雪花型实施,而转载 2016-12-29 08:58:21 · 1578 阅读 · 0 评论 -
完全停止Oracle中正在运行的JOB
Killing the Oracle DBMS_JOBJames F. Koopmann, www.dbdoctor.net源地址:http://www.quest-pipelines.com/newsletter-v4/0403_C.htmTake control of Oracle's queue with a step by step approach to getting rid of t转载 2016-12-29 09:04:19 · 3635 阅读 · 0 评论 -
Oracle数据库中的本地索引和全局索引的区别
表可以按range,hash,list分区,表分区后,其上的索引和普通表上的索引有所不同,Oracle对于分区表上的索引分为2类,即局部索引和全局索引,下面分别对这2种索引的特点和局限性做个总结。 局部索引local index1. 局部索引一定是分区索引,分区键等同于表的分区键,分区数等同于表的分区说,一句话,局部索引的分区机制和表的分区机制一样。2. 如果局部索引的索引列以分区键开头,则称为前转载 2016-12-29 09:10:34 · 5836 阅读 · 0 评论 -
Oracle 10.2 流复制问题(一)—— ORA-01403: no data found
在使用Oracle 10g 流复制时出现过一些问题,现在把解决过程总结一下。 系统配置:HP-UX B.11.31 U ia64、Oracle Enterprise Edition Release 10.2.0.4.0、表级单向流复制问题现象:流复制失效,源表更新,目标表没有更新排错过程: 1) 查看应用错误信息SQL> select apply_name,LOCAL_TRANSACTION_ID原创 2016-12-29 09:13:36 · 827 阅读 · 0 评论 -
Oracle 10.2 流复制问题(二)—— C001: large txn detected
系统配置:HP-UX B.11.31 U ia64、Oracle Enterprise Edition Release 10.2.0.4.0、表级单向流复制问题现象:流复制失效,源表更新,目标表没有更新,没有apply error信息排错过程: 1) 检查源库的alert_.log,发现大量C001: large txn detectedC001: large txn detected (2457原创 2016-12-29 09:14:53 · 724 阅读 · 0 评论 -
Oracle 10.2 流复制问题(三)—— 大事务处理
以下是实践中大事务处理过程:1) 停止流-- 源数据库停止Capture进程connect strmadminBEGINDBMS_CAPTURE_ADM.STOP_CAPTURE(capture_name => 'capture1');END;/-- 目标数据库停止Apply进程connect strmadminbegindbms_apply_adm.stop_apply(apply_name =原创 2016-12-29 09:16:53 · 1032 阅读 · 0 评论 -
Oracle 10.2 流复制问题(四)—— ORA-01341: LOGMINER OUT-OF-MEMORY in Oracle Streams
系统配置:Linux CentOS 5、Oracle Enterprise Edition Release 10.2.0.1.0、表级单向流复制问题现象:流复制失效,源表更新,目标表没有更新排错过程: 1) 查看捕获进程状态select capture_name,status from dba_capture;Capture status 为ABORTED 2) 查看alert_.logkrvxe原创 2016-12-29 09:18:30 · 895 阅读 · 0 评论 -
Oracle流复制配置最佳实践
一、通用配置1. 使用Oracle 10.2.0.4版本,并且安装所有关键补订包 2. 下游捕获需要源和目标库运行在相同平台上 3. 准备源和目标数据库的redo logs(1) 配置源和目标库的archivelog模式(2) 配置本地归档目标路径,log_archive_dest_1参数,不要使用flash recovery area。 4. 建立流转用表空间:对于下游捕获,只在下游捕获数据库建翻译 2016-12-29 09:19:59 · 3250 阅读 · 0 评论 -
海量数据查询优化
这是我面试的一家数据维护业务公司的面试题,虽然这个职位并不是我所期望的Java开发的工作,自己还是想把握好每一次机会,最后还是去尝试了一下。 由于平时开发的应用数据量比较小,不太关注性能优化的问题,所以不知如何作答,答得不好,很是郁闷。从网上搜索出海量数据查询优化的两篇文章,转载下来,学习学习。 数据库优化查询计划的方法数据库系统是管理信息系统的核心,基于数据库的联机事务处转载 2016-12-29 09:25:07 · 936 阅读 · 0 评论 -
Oracle Dimension (Oracle 维)
在数据仓库环境中,我们通常利用物化视图强大的查询重写功能来提升统计查询的性能,但是物化视图的查询重写功能有时候无法智能地判断查询中一些相关联的条件,以至于影响性能。比如我们有一张销售表sales,用于存储订单的详细信息,包含交易日期、顾客编号和销售量。我们创建一张物化视图,按月存储累计销量信息,假如这时候我们要查询按季度或者按年度统计销量信息,Oracle是否能够智能地转换查询重写呢?我们知道交易转载 2016-12-29 09:34:45 · 1825 阅读 · 0 评论 -
MySQL实现树的遍历
经常在一个表中有父子关系的两个字段,比如empno与manager,这种结构中需要用到树的遍历。在Oracle 中可以使用connect by简单解决问题,参见http://blog.csdn.net/wzy0623/archive/2007/06/18/1656345.aspx,但MySQL 5.1中还不支持(据说已纳入to do中),要自己写过程或函数来实现。一、建立测试表和数据:[c-sha原创 2016-12-29 09:42:13 · 2785 阅读 · 0 评论 -
从一个用户expdp导出再impdp导入到另一个用户
如果想导入的用户已经存在:1. 导出用户 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp2. 导入用户 impdp user2/pass2 directory=dumpdir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2 EXCLUDE=USER如果想导入的用户不存在:1. 导出用户 expdp原创 2016-12-29 09:43:36 · 22916 阅读 · 2 评论 -
Oracle通过HSODBC访问mysql
一、环境OS:Linux myhostname 2.6.9-42.ELsmp #1 SMP Sat Aug 12 09:39:11 CDT 2006 i686 i686 i386 GNU/Linux CentOS release 4.4 (Final)Oracle:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Pr原创 2016-12-29 09:45:20 · 2732 阅读 · 0 评论 -
Inlist的绑定优化(书摘备查)
-- 建立类型CREATE OR REPLACE TYPE numtabletype AS TABLE OF NUMBER;CREATE OR REPLACE TYPE vartabletype AS TABLE OF VARCHAR2 (1000); -- 解析字符串CREATE OR REPLACE FUNCTION str2numlist (p_string IN VARCHAR2) R原创 2016-12-29 10:05:41 · 826 阅读 · 0 评论 -
How To Load CLOB Data from a File into a CLOB column using PL/SQL
主题:How To Load CLOB Data from a File into a CLOB column using PL/SQL 文档 ID:437432.1类型:HOWTO Modified Date:02-OCT-2007状态:MODERATEDIn this Document Goal SolutionThis document is being delivered to you转载 2016-12-29 10:14:08 · 804 阅读 · 0 评论 -
How to Estimate Export File Size Without Creating Dump File
PURPOSE------- Estimate file size of export dumpfile without creating the actual dump file. How to estimate export dumpfile size using pipe, /dev/null, and dd------------------------------------------转载 2016-12-29 10:16:37 · 613 阅读 · 0 评论 -
Oracle 中 table 函数的应用
表函数可接受查询语句或游标作为输入参数,并可输出多行数据。该函数可以平行执行,并可持续输出数据流,被称作管道式输出。应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表。 1. 用游标传递数据利用游标 REF CURSOR 可将数据集(多行记录)传递到PL/SQL函数:SELECT * FROM TABLE (myfunction (CURSOR (SELECT *原创 2016-12-29 10:25:47 · 708 阅读 · 0 评论 -
Oracle由SQL查询生成XML
CREATE OR REPLACE PROCEDURE TEST.put_query_xml ( q_string IN VARCHAR2, RESULT OUT CLOB)IS qryctx DBMS_XMLGEN.ctxhandle;BEGIN qryctx := DBMS_XMLGEN.newcontext (q_string); D原创 2016-12-29 10:35:45 · 3823 阅读 · 0 评论 -
在ORACLE中使用DOM方式解析XML
XML格式: Montgomery Burns Release the Hounds! 解析代码CREATE OR REPLACE FUNCTION idAttributeOfDocElement(xmldoc VARCHAR2 ) RETURN VARCHAR2 IS theXmlDoc xmldom.DOM转载 2016-12-29 10:38:38 · 6822 阅读 · 0 评论 -
Oracle ROLLUP和CUBE 用法
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B)转载 2016-12-29 10:42:14 · 1097 阅读 · 0 评论