mysql 脏页刷新_MYSQL 脏页刷新

起因

昨天看了CSDN推送的一篇《腾讯面试:一条SQL语句执行得很慢的原因有哪些?》

里面主要提到了

1.数据库在刷新脏页的时候会导致SQL很慢

2.锁的问题

3.sql本身的问题

下面主要对刷脏页理解,自己总结下

mysql 刷脏块的几种情况

1.redo日志切换

2.buffer pool不足

3.mysql 自己觉得空闲

4.mysql正常关机

上面的3,4两种情况可以忽略他们对性能的印象。

而 1,2两种情况都有可能会影响mysql整体的性能,其实两种情况的原因是一样的,刷脏页会占用大量的IO资源,会影响到你其他的sql。

第一种情况,redo写满了需要覆盖,覆盖前需要filush没有被写入磁盘的脏页,这种情况是要尽量的避免的,因为这种情况出现,整个系统会不在DML。在5.6之前可能还会阻塞查询。

第二中情况,内存不够了,需要为查询或者更新腾出对应的空闲页,这种情况很常见。

上面还会涉及很多的东西,比如检查点,LRU LIST,FLUSH LIST,FREE LIST .

影响

主要两个方面:

1.innodb_max_dirty_pages_pct

1280284833091698688.htm

2.innodb_io_capacity

3.innodb_adaptive_flushing(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现清空购物车并刷新页面,可以按照以下步骤进行: 1. 在MySQL数据库中创建购物车表,用于存储用户加入购物车的商品信息,表结构如下: ```sql CREATE TABLE cart ( id INT(11) NOT NULL AUTO_INCREMENT, user_id INT(11) NOT NULL, product_id INT(11) NOT NULL, quantity INT(11) NOT NULL, PRIMARY KEY (id) ); ``` 2. 创建JavaBean类,用于封装购物车中的商品信息。假设该类名为`CartItem`,包含以下属性: ```java public class CartItem { private int id; private int userId; private int productId; private int quantity; // getter和setter方法省略 } ``` 3. 创建Servlet,用于处理清空购物车的请求。在Servlet中,首先需要获取当前用户的ID,然后根据用户ID从购物车表中删除所有商品信息,最后将页面重定向到购物车页面。代码如下: ```java public class ClearCartServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取当前用户的ID int userId = ((User) request.getSession().getAttribute("user")).getId(); // 从购物车表中删除所有商品信息 Connection conn = null; PreparedStatement ps = null; try { conn = DbUtils.getConnection(); String sql = "DELETE FROM cart WHERE user_id=?"; ps = conn.prepareStatement(sql); ps.setInt(1, userId); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { DbUtils.closeQuietly(conn, ps); } // 重定向到购物车页面 response.sendRedirect(request.getContextPath() + "/cart.jsp"); } } ``` 4. 在购物车页面中添加清空购物车的按钮,点击该按钮时向Servlet发送清空购物车的请求。代码如下: ```html <form action="${pageContext.request.contextPath}/clearCart" method="get"> <button type="submit">清空购物车</button> </form> ``` 其中`${pageContext.request.contextPath}`可以获取当前Web应用的根路径。 5. 刷新购物车页面时,需要从购物车表中获取当前用户的所有购物车商品信息,并将其显示在页面上。代码如下: ```java public class CartServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取当前用户的ID int userId = ((User) request.getSession().getAttribute("user")).getId(); // 从购物车表中获取当前用户的所有购物车商品信息 List<CartItem> cartItems = new ArrayList<>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = DbUtils.getConnection(); String sql = "SELECT * FROM cart WHERE user_id=?"; ps = conn.prepareStatement(sql); ps.setInt(1, userId); rs = ps.executeQuery(); while (rs.next()) { CartItem cartItem = new CartItem(); cartItem.setId(rs.getInt("id")); cartItem.setUserId(rs.getInt("user_id")); cartItem.setProductId(rs.getInt("product_id")); cartItem.setQuantity(rs.getInt("quantity")); cartItems.add(cartItem); } } catch (SQLException e) { e.printStackTrace(); } finally { DbUtils.closeQuietly(conn, ps, rs); } // 将购物车商品信息传递给页面 request.setAttribute("cartItems", cartItems); request.getRequestDispatcher("/cart.jsp").forward(request, response); } } ``` 在页面中,可以通过JSTL标签库来遍历购物车商品信息,并将其显示在页面上。代码如下: ```html <c:forEach items="${cartItems}" var="cartItem"> <tr> <td>${cartItem.productId}</td> <td>${cartItem.quantity}</td> </tr> </c:forEach> ``` 以上就是使用JavaBean、MySQL和Servlet实现清空购物车并刷新页面的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值