
修改方法
有两种方法可以对配置了 systemd 的程序进行资源隔离:1. 命令行修改:通过执行 systemctl set-property 命令实现,形式为 systemctl set-property name parameter=value;修改默认即时生效。2. 手工修改文件:直接编辑程序的 systemd unit file 文件,完成之后需手工执行 systemctl daemon-reload 更新配置,并重启服务 systemctl restart name.service。
systemd unit file 里支持的资源隔离配置项,如常见的:
CPUQuota=value
该参数表示服务可以获取的最大 CPU 时间,value 为百分数形式,高于 100% 表示可使用 1 核以上的 CPU。与 cgroup cpu 控制器 cpu.cfs_quota_us 配置项对应。
MemoryLimit=value
该参数表示服务可以使用的最大内存量,value 可以使用 K, M, G, T 等后缀表示值的大小。与 cgroup memory 控制器 memory.limit_in_bytes 配置项对应。
事务的4种隔离级别
READ UNCOMMITTED 未提交读,可以读取未提交的数据。
READ COMMITTED 已提交读,对于锁定读(select with for update 或者 for share)、update 和 delete 语句,InnoDB 仅锁定索引记录,而不锁定它们之间的间隙,因此允许在锁定的记录旁边自由插入新记录。
Gap locking 仅用于外键约束检查和重复键检查。
REPEATABLE READ 可重复读,事务中的一致性读取读取的是事务第一次读取所建立的快照。
SERIALIZABLE 序列化在了解了 4 种隔离级别的需求后,在采用锁控制隔离级别的基础上,我们需要了解加锁的对象(数据本身&间隙),以及了解整个数据范围的全集组成。
数据范围全集组成
SQL 语句根据条件判断不需要扫描的数据范围(不加锁);
SQL 语句根据条件扫描到的可能需要加锁的数据范围;
以单个数据范围为例,数据范围全集包含:(数据范围不一定是连续的值,也可能是间隔的值组成)
有一个任务序列控制sql语句的执行,第一次有select的语句查询表a,mysql服务器在执行select之前将表a加读锁,
第二次又有一条select语句查询表a, mysql服务器发现在任务序列中有表a的读锁,也就是同时还有一个sql查询表a,读锁不会影响这条sql语句,
当有一条update或者insert语句对表a *** 作时,mysql服务器会对表a加写锁,以此提示之后的对表a *** 作的sql语句等待写锁解锁后在执行,以免造成写入与读取的混乱!
如何用java开启mysql事务,要求详细看你是什么事务,jdbc事务,还是分布式事务,还是容器事务
1,编程式事务管理(jdbc的事务是绑定在connection上的)
Connection conn = null
try
{
Class.forName("com.mysql.jdbc.Driver")
conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","password")
conn.setAutoCommit(false) //取消自动提交
PreparedStatement ps = conn.prepareCall("update something")
ResultSet rs = ps.executeQuery()
conn.commit() //手动提交
}
catch (Exception e)
{
conn.rollback()
e.printStackTrace()
}
finally
{
conn.close()
}
2,声明式事务
先在工程的application.xml配置文件中添加如下代码,开启事务
<!-- 声明式事务控制配置 -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="datasource" ref="bassDataSource"></property>
</bean>
然后在你需要开启事务的接口前面添加注解
@Transactional(rollbackFor = IOException.class)
public void add(String name) throws IOException
{
System.out.println("可以再类里和方法里面添加事务注解0~0")
throw new IOException()
}
直接调用接口方法就好
分布式事务处理(mysql貌似在5.X之后才支持) 的话,
1.可以直接使用spring+atomikos框架进行管理
参考:http://blog.chinaunix.net/uid-21162795-id-3424973.html
就不贴测试代码了,自己看着配置吧
2,使用JTA(Java Transaction API)进行分布式事务管理(测试代码如下)
import java.sql.Connection
import java.sql.PreparedStatement
import java.sql.SQLException
import javax.naming.InitialContext
import javax.sql.DataSource
import javax.transaction.SystemException
import javax.transaction.UserTransaction
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource
//分布式事务处理
public class transferAccount
{
@SuppressWarnings("null")
public void testTransferAccount()
{
UserTransaction userts = null
Connection connA = null
PreparedStatement psA = null
InitialContext context = null
Connection connB = null
PreparedStatement psB = null
try
{
//获得事务管理对象
userts = (UserTransaction) context.lookup("java:comp/UserTransaction")
//获取两个数据库
connA = getDataSourceA().getConnection()
connB = getDataSourceB().getConnection()
//开启事务
userts.begin()
//sql语句
psA = connA.prepareStatement("我加1")
psB = connB.prepareStatement("我减1")
//执行sql
psA.executeUpdate()
psB.executeUpdate()
//事务提交
userts.commit()
} catch (Exception e)
{
try
{
userts.rollback()
} catch (IllegalStateException | SecurityException
| SystemException e1)
{
e1.printStackTrace()
}
e.printStackTrace()
}
finally
{
try
{
psA.close()
psB.close()
connA.close()
connB.close()
} catch (SQLException e)
{
e.printStackTrace()
}
}
}
public DataSource getDataSourceA()
{
MysqlDataSource dataSource = new MysqlDataSource()
dataSource.setDatabaseName("mysql")
dataSource.setServerName("server")
dataSource.setPortNumber(1433)
dataSource.setUser("test")
dataSource.setPassword("test")
return dataSource
}
public DataSource getDataSourceB()
{
MysqlDataSource dataSource = new MysqlDataSource()
dataSource.setDatabaseName("mysql")
dataSource.setServerName("server")
dataSource.setPortNumber(1435)
dataSource.setUser("test1")
dataSource.setPassword("test1")
return dataSource
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)