--重新分析表 analyze table table1 compute statistics for table for all indexes for all indexed columns; --解析执行计划 explain plan for select xx1,xx2,xx3,xx4,xx5 from table1 t1 where t1.xx1 = 'yyy';
Author Archives: neohope
查询视图时不使用索引
今天发生了一件很诡异的事情,平台网关有一张对外提供的视图,用某字段进行查询时,效率奇低无比。
--view select * from user1.view1 v1 where v1.mark='mark001'; --table select * from user1.table1 t1 where t1.mark='mark001';
分析视图对应的表信息后发现,虽然对mark字段建立了索引,但查询语句中使用的mark字段值“mark001”,
所占比例竟然已经达到40%,应该是历史数据导致的。
然后将历史数据处理后,重建mark字段索引,诡异的事情发生了:
即使mark字段值“mark001”的比例小于0.1%,查询依然不走索引。
重建索引无效,就差重新建表了,压力山大啊。
最后,休息了一下,抱着试试看的态度,重新分析了表table1:
analyze table user1.table1 compute statistics for table for all indexes for all indexed columns;
查询终于走索引了,速度立刻上去了。
这才记起来,前几天,按某人的建议,把oracle的统计信息关掉了。。。
自己挖坑把自己埋了。。。
四个小时啊。。。
我的考评还没来得及写,还有十几封邮件要写,悲剧啊~~
我恨某潘~~
.Net4的WinForm程序使用.Net2控件
在.Net4的WinForm程序中,混用.Net2控件会报下面的问题
Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.
解决方法为在App.config文件中,增加以下配置
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
八后问题Ruby02
Queen.rb
class Queen
def initialize()
@v=0
end
def canSetQueen(lst,s,x,y)
lstNo = Array.new()
for i in 0..s-1 do
p = Pt.new(x,i)
lstNo.push(p)
end
for j in 0..s-1 do
p = Pt.new(j,y)
lstNo.push(p)
end
x0=x
y0=y
while x0<s and y0<s
p=Pt.new(x0,y0)
lstNo.push(p)
x0=x0+1
y0=y0+1
end
x0=x
y0=y
while x0>=0 and y0>=0
p=Pt.new(x0,y0)
lstNo.push(p)
x0=x0-1
y0=y0-1
end
x0=x
y0=y
while x0>=0 and y0<s
p=Pt.new(x0,y0)
lstNo.push(p)
x0=x0-1
y0=y0+1
end
x0=x
y0=y
while x0<s and y0>=0
p=Pt.new(x0,y0)
lstNo.push(p)
x0=x0+1
y0=y0-1
end
while(lstNo.length>0)
p=lstNo.pop
if(p.y==lst[p.x])
return false
end
end
return true
end
def findQueen(lst,s,x)
if(x>=s)
@v=@v+1
puts("]>>solution No."+@v.to_s)
pp lst
return
end
for y in 0..s-1 do
if(canSetQueen(lst,s,x,y))
lst.push(y)
findQueen(lst,s,x+1)
lst.pop
end
end
end
end
class Pt
attr_accessor:x
attr_accessor:y
def initialize(x,y)
@x=x
@y=y
end
end
test.rb
require "pp"
require "./Queen.rb"
len = 8
lst = Array.new()
q=Queen1.new
q.findQueen(lst,len,0)
puts("end")
八后问题Ruby01
Queen.rb
class Queen
def initialize()
@v=0
end
def arrCopy2(arr)
arr0=Array.new(arr.length)
for i in 0..arr.length-1 do
arr0[i]=Array.new(arr[i])
end
return arr0
end
def addQueen(arr,x,y)
setQueen(arr,x,y,1)
end
def setQueen(arr,x,y,n)
for i in 0..arr.length-1 do
arr[x][i]=n
end
for j in 0..arr[x].length-1 do
arr[j][y]=n
end
x0=x
y0=y
while x0<arr.length and y0<arr[x0].length
arr[x0][y0]=n
x0=x0+1
y0=y0+1
end
x0=x
y0=y
while x0>=0 and y0>=0
arr[x0][y0]=n
x0=x0-1
y0=y0-1
end
x0=x
y0=y
while x0>=0 and y0<arr[x0].length
arr[x0][y0]=n
x0=x0-1
y0=y0+1
end
x0=x
y0=y
while x0<arr.length and y0>=0
arr[x0][y0]=n
x0=x0+1
y0=y0-1
end
return arr
end
def findQueen(arr,lst,x)
if(x>=arr.length)
@v=@v+1
puts("]>>solution No."+@v.to_s)
pp lst
return
end
for y in 0..arr[x].length-1 do
if(arr[x][y]==0)
lst.push(y)
arr0=arrCopy2(arr)
addQueen(arr,x,y)
findQueen(arr,lst,x+1)
arr=arr0
lst.pop
end
end
end
end
test.rb
require "pp"
require "./Queen.rb"
len = 8
arr=Array.new(len){Array.new(len, 0)}
#fuck
#arr = Array.new(len, Array.new(len,0))
lst = Array.new()
q=Queen.new
q.findQueen(arr,lst,0)
puts("end")
JAVA常用缩写
今天整理的一份文档,希望对大家有所帮助
AAA: Authentication, Authorization, Accounting
AWT: Abstract Window Toolkit (AWT VS. Swing VS. SWT)
AOP: ASPect Oriented Programming
BMP: Bean-Managed Persistent
CMP: Container-Managed Persistent
CORBA: Common Object Request Broker Architecture
DI: Dependency Injection
DTD: Document Type Definition
EJB: Enterprise Java Beans(Session Beans, Entity Beans, Message-driven Beans)
IDL: Interface Definition Language
IIOP: Internet Inter-ORB Protocol
IOC: Inversion Of Control
I18N: InternationalizationN
L10N: LocalizatioN
J2EE: Java2 Enterprise Edition(EJB, JTA, JDBC, JCA, JMX, JNDI, JMS, JavaMail, Servlet, JSP)
J2ME: Java2 Micro Edition
J2SE: Java2 Standard Edition
JAF: Java Action FrameWork
JCA: Java Cryptography Architecture
JCP: Java Community Process
JDBC: Java Data Base Connectivity
JDK: Java Development Kit
JDO: Java Data Object
JFC: Java Foundation Classes
JMS: Java Message Service
JNDI: Java Naming And Directory Interface
JNI: Java Native Interface
JPA: Java Persistence API
JRE: Java Runtime Environment
JSDK: Java Software Development Kit
JSF: Java Server Faces
JSP: Java Server Pages
JTA: Java Transaction API
JTS: Java Transaction Service
JVM: Java Virtual Machine(JRE VS. JNode VS. SableVM)
MVC: Model, View, Controller
OMG: Object Menagement Group
OCP: Open Closed Principle (Software entities should be open for extension, but closed for modification.)
OR Mapping: Object Relation Mapping
PI: Processing Instruction
PO: Persisent Object
POJO: Plain Ordinary Java Object
RADIUS: Remote Authentication Dial In User Service
RMI: Remote Method Invocation
RTTI: RunTime Type Identification
SOA: Service-Oriented Architecture
SPI: Service Provider Interface
WFC: Windows Foundation Classes for Java
WORA: Write Once, Run Anywhere
Win2008下调试Service程序
Win2008下调试Service程序时,发现无法使用DebugBreak(),否则程序直接挂掉,无法进行调试。
有资料说是,修改错误报告的选项就可以修正这个问题了,尝试后发现无效,暂时只能一点儿一点儿调试了。
另外,Win2008上内存检测严格了很多,需要注意。
Io自学笔记01
//animal
animal := Object clone
animal name := "name"
//dog
dog := animal clone
dog name := "dog"
dog isSit := false
dog bark := method(writeln("woof"))
dog sit := method(
if(isSit==true,writeln("sitting now");bark;return;)
isSit=true
writeln("sit ok")
bark
)
//fido
fido := dog clone
fido name := "fido"
fido bark := method(
writeln("ruf")
)
//test
writeln("dog bark>>")
dog bark
writeln("dog sit>>")
dog sit
writeln("dog sit>>")
dog sit
writeln("fido bark>>")
fido bark
writeln("fido sit>>")
fido sit
writeln("fido sit>>")
fido sit
关闭和打开Oralce10g自动收集COB信息
前几天,发现平台的一支程序突然运行的很慢,经分析后,发现是数据库查询变得超级慢。
用OB9分析后,发现索引正常,没办法最后重启了数据库后,速度直接飚上来了。
但好景不长,第二天早上4点后,又变成龟速,只好找公司DBA帮忙分析问题。
最后发现是Oracle的自动统计分析Job,每天自动进行统计,然后优化器就不走索引,而走统计分析的结果。
而我们的表有较多的删除操作,很快统计分析的结果就不可靠了,结果速度很快就下来了。
最后,禁用之,搞定:)
--状态查询
select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'
--sysdba
--关闭
exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');
--sysdba
--启用
exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');
JNI简单例子2
最近又用jni写了一个编码工具,从中抽出了最简单的代码,如下:
1、Compress4j.java
package com.neohope.test.compress.jni;
/**
*
* @author Hansen
*/
public class Compress4j {
private native int encodeR(String inFilePath,String outFilePaht);
private native int decodeR(String inFilePath,String outFilePaht);
static{
try{
System.loadLibrary("compress4j");
}catch(UnsatisfiedLinkError e){
//nothing to do
System.out.println("Error: Couldn't load compress4j");
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public String encode(String inFilePath,String outFilePath)
{
encodeR(inFilePath, outFilePath);
return "xxxxx";
}
public String decode(String inFilePath,String outFilePath)
{
decodeR(inFilePath, outFilePath);
return "xxxxx";
}
}
2、找到生成的classes文件夹,运行命令行:
javah -classpath . -jni com.neohope.test.compress.jni.Compress4j
3、生成的.h文件如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_neohoe_test_compress_jni_Compress4j */
#ifndef _Included_com_neohoe_test_compress_jni_Compress4j
#define _Included_com_neohoe_test_compress_jni_Compress4j
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_neohoe_test_compress_jni_Compress4j
* Method: encodeR
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_neohoe_test_compress_jni_Compress4j_encodeR
(JNIEnv *, jobject, jstring, jstring);
/*
* Class: com_neohoe_test_compress_jni_Compress4j
* Method: decodeR
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_com_neohoe_test_compress_jni_Compress4j_decodeR
(JNIEnv *, jobject, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif
3、编写成的.cc文件如下
#include "com_neohoe_test_compress_jni_Compress4j.h"
JNIEXPORT jint JNICALL Java_com_neohoe_test_compress_jni_Compress4j_encodeR
(JNIEnv *env, jobject, jstring inpathjs, jstring outpathjs)
{
//first convert jstring to const char*
const char* inpath = env->GetStringUTFChars( inpathjs, false);
const char* outpath = env->GetStringUTFChars( outpathjs, false);
//...
return 0;
}
JNIEXPORT jint JNICALL Java_com_neohoe_test_compress_jni_Compress4j_decodeR
(JNIEnv *env, jobject, jstring inpathjs, jstring outpathjs)
{
//first convert jstring to const char*
const char* inpath = env->GetStringUTFChars( inpathjs, false);
const char* outpath = env->GetStringUTFChars( outpathjs, false);
//...
return 0;
}
4、在VS工程中,新增头文件目录
%JAVA_HOME%/include
%JAVA_HOME%/include/win32
5、编译为dll即可使用啦
6、关于mt和md的问题
编译为MT和MTd的话,用JNI是没有任何问题的
编译为MD的话,需要安装VC2010sp1可再发行包
编译为MDd的话,就比较麻烦了,手动复制依赖的dll后,我用c++调用dll可以成功,但用jni就一直提示:缺少依赖的dll