我没有使用自动提交连接到SQL Server.如果一切顺利,我会调用commit.否则,我就退出.我是否需要显式调用回滚,否则在我们关闭连接而不提交时会自动回滚?
如果它很重要,我正在SAS中的proc sql中执行SQL命令.
更新:如果没有调用回滚,看起来SAS可能会在proc sql块的末尾自动调用commit.所以在这种情况下,回滚不仅仅是好的做法; 这是必要的.
最后更新:我们最终切换到一个新系统,在我看来,这与我们之前的系统相反.在结束事务而不指定提交或回滚时,它将回滚.因此,下面给出的建议绝对正确:始终显式提交或回滚.
所以我对慢查询日志的理解是,它记录了我们在my.conf文件中设置的> = time(以秒为单位)的所有查询的信息.
现在让我们来看3个不同的SELECT查询3个案例(针对具有INNODB引擎的表):
QUERY I: Query_time:32.937667 Lock_time:0.000081 Rows_sent:343 Rows_examined: 12714043
QUERY II: Query_time:12.937667 Lock_time:0.000081 Rows_sent:43 Rows_examined: 714043
QUERY III: Query_time:42.937667 Lock_time:0.000081 Rows_sent:18 Rows_examined: 483
对我来说,QUERY I和QUERY II看起来像是一个糟糕的查询或糟糕的索引(或缺少索引)或碎片化的表数据等(我可能错过的任何其他东西?)用户可能会看到以改善查询执行时间的可能情况.
但是对于QUERY III,我无法理解,我的意思是数据库真正错误的是它需要42秒才能检查483行并发送回其中的18行(锁定时间可忽略不计).当我看到它间歇性地发生时,这变得更加混乱.
所以我真正想问的是:
可能有很多因素影响这种慢查询,所以如果你觉得你需要更多的信息来帮助我,那么请告诉我.
我写了这段代码,似乎编译器允许在使用'this'关键字访问时访问未初始化的空白最终字段:
public class TestClass
{
public final int value1;
public int value2;
TestClass(int value) {
value2 = 2 + this.value1; // access final field using 'this' before initialization gives no compiler error
//value2 = 2 + value1; // uncomment it gives compile time error - variable value1 might not have been initialized
value1 = value;
}
public static void main(String args[]) {
TestClass tc = new TestClass(10);
System.out.println("\nTestClass Values : value1 = " + tc.value1 + " , value2 = …Run Code Online (Sandbox Code Playgroud) 我知道类似的问题已在此链接中得到解答帮助我修复此C++ std :: set比较器 但不幸的是我面临完全相同的问题,我无法理解它背后的原因因此需要一些帮助来解决它.
我正在使用VS2010,我的发布二进制文件运行正常没有任何问题,但调试二进制报告:

我的比较器看起来像这样:
struct PathComp {
bool operator() (const wchar_t* path1, const wchar_t* path2) const
{
int c = wcscmp(path1, path2);
if (c < 0 || c > 0) {
return true;
}
return false;
}
};
Run Code Online (Sandbox Code Playgroud)
我的集合声明如下:
set<wchar_t*,PathComp> pathSet;
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么我的调试二进制文件在这个断言失败了吗?是因为我使用wcscmp()函数来比较存储在我的集合中的宽字符串吗?
提前致谢!!!
根据 java API,当应用程序尝试按名称访问枚举常量并且枚举类型不包含具有指定名称的常量时,会引发 EnumConstantNotPresentException。
因此我决定提出一个抛出 java.lang.EnumConstantNotPresentException 的场景,所以我编写了以下三个类。
我的枚举类:
package my.enumtest;
enum MyEnum {
A, B, C;
}
Run Code Online (Sandbox Code Playgroud)
MyEnumTest1 类:
package my.enumtest;
import my.enumtest.MyEnum;
class MyEnumTest1 {
public static void main(String [] args) {
System.out.println(MyEnum.A);
}
}
Run Code Online (Sandbox Code Playgroud)
MyEnumTest2 类:
package my.enumtest;
import my.enumtest.MyEnum;
class MyEnumTest2 {
public static void main(String [] args) {
System.out.println(MyEnum.valueOf("A"));
}
}
Run Code Online (Sandbox Code Playgroud)
我编译了所有三个,然后更改了 MyEnum 类以删除常量“A”并重新编译它:
package my.enumtest;
enum MyEnum {
B, C;
}
Run Code Online (Sandbox Code Playgroud)
在使用新的 MyEnum 类执行 MyEnumTest1 时,出现以下异常:
线程“main”中的异常 java.lang.NoSuchFieldError: A at my.enumtest.MyEnumTest1.main(MyEnumTest1.java:8)
在使用新的 MyEnum 类执行 MyEnumTest2 …
我将尝试通过以下3个案例来解释这个问题.情况I:我使用共享锁进行同步,使用类似这样的方法:
private static final String SHARED_LOCK = "shared_lock";
private static int i = 0;
private static int j = 0;
void increment() {
synchronized (SHARED_LOCK) {
i++;
j++;
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.
情况II:现在我在这里更改的是使用共享锁而不是使用本地锁通过执行以下操作:
private static int i = 0;
private static int j = 0;
void increment() {
final String LOCAL_LOCK = "local_lock";
synchronized (LOCAL_LOCK) {
i++;
j++;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现代码仍然正常工作,同步仍然有效.
案例III:但是当我将本地locl更改为:
final String LOCAL_LOCK = new String("local_lock");Run Code Online (Sandbox Code Playgroud)
然后同步就消失了.所以看起来在CASE II中本地锁能够提供同步,因为Java为我们自动执行的字符串文字的实现,但在CASE III中,因为我每次都明确地创建一个新的字符串,因此没有发生同步.
所以回到我原来的问题.有谁觉得CASE II不是实现同步的正确方法吗?如果是,你还可以提一下为什么?
在此先感谢,SacTiw.
java ×3
c++ ×1
enums ×1
final ×1
javac ×1
mysql ×1
sas ×1
sql ×1
sql-server ×1
transactions ×1