sql 多线程

1、codeproject上面一个多线程执行sql的库。

开发中常常要执行一些耗时的数据操作,比如update、insert、bulk insert、index creation,

若顺序执行,则操作总时间是每个单独sql的时间之和  为了加快速度,采用线程池异步执行的做法,比如要要create 10个表以及加数据,则可以开10个线程去分别执

 codeproject上库源码地址 http://www.codeproject.com/Articles/29356/Asynchronous-T-SQL-Execution-Without-Service-Broke
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlTypes;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SqlClrLib.Model;

namespace ExampleTransaction
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //开发中常常要执行一些耗时的数据操作,比如update、insert、bulk insert、index creation,
            //若顺序执行,则操作总时间是每个单独sql的时间之和,
            //为了加快速度,引入异步执行的做法,比如要要create 10个表以及加数据,则可以开10个线程去分别执行
        }

        [Microsoft.SqlServer.Server.SqlProcedure]
        public static int SaveWarehouseFinalData(Guid fileDefinitionId)
        {
            Console.WriteLine("Start");
            StoredProcedures.Parallel_Declare(new SqlString("Parallel SaveWarehouseFinalData"));
            //Console.WriteLine("Database connection is ... {0}", StoredProcedures.Block.ConnectionString);
            //Console.WriteLine("Max threads count is ... {0}", StoredProcedures.Block.MaxThreads);
            ////ParallelProcedures.Block.IsTransactional = true;
            ////ParallelProcedures.Parallel_UseTransaction("Serializable");
            //依次将存储过程加入到线程池
            StoredProcedures.Parallel_AddSql(new SqlString("usp_WarehouseImportSaveToEAV"), new SqlChars(string.Format("usp_WarehouseImportSaveToEAV ‘{0}‘", fileDefinitionId)));
            StoredProcedures.Parallel_AddSql(new SqlString("usp_WarehouseImportSaveToAdminHistory"), new SqlChars(string.Format("usp_WarehouseImportSaveToAdminHistory ‘{0}‘", fileDefinitionId)));
            StoredProcedures.Parallel_AddSql(new SqlString("usp_WarehouseImportSaveToValResult"), new SqlChars(string.Format("usp_WarehouseImportSaveToValResult ‘{0}‘", fileDefinitionId)));
            //执行save操作(此处用的事务,如果不成功会回滚)
            int failedCount = StoredProcedures.Parallel_Execute();
            //Console.WriteLine("Failed count is ... {0}", failedCount);
            ResultItem[] resultItems = (ResultItem[])StoredProcedures.Parallel_GetExecutionResult();
            foreach (ResultItem r in resultItems)
            {
                //Console.WriteLine(r.ToString());
            }
            //Console.WriteLine("End...");

            return failedCount;
        }

    }
}
时间: 2024-10-27 14:06:29

sql 多线程的相关文章

Linux云计算运维-MySQL

0.建初心 优秀DBA的素质 1.人品,不做某些事情2.严谨,运行命令前深思熟虑,三思而后行,即使是依据select3.细心,严格按照步骤一步一步执行,减少出错4.心态,遇到灾难,首先要稳住,不慌张,不要受到旁人的影响5.熟悉操作系统,Linux系统的工具和命令6.熟悉业务(开发),编程语言7.熟悉行业8.喜欢数据库 • 什么是数据? 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质.状态以及相互关系等进行记载的物理符号或这些物理符号的组合.它是可识别的.抽象的符号. • 什么是数

MySQL主从复制介绍:使用场景、原理和实践

MySQL主从复制介绍:使用场景.原理和实践 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借助第三方工具,而且,MySQL的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的binlog日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的SQL语句重新应用到MySQL数据库中. 1.1.1 MySQL主从复制介绍 MySQL数据库支持单向.双向.链式级联.环状等不同业务场景的

解决多线程调用sql存储过程问题

场景: 我们程序现在改成多线程了,我现在需要把临时表中的数据给插入到TABLE_M中,但这时候可能其他的线程也在插入,我就不能用之前我们的方案了(select max(oid) from Tuning.TABLE_M...,之后去维护主子表关系,改掉TABLE_M的OID的自增属性,插入,之后再添加上自增属性......) 我现在是想这样操作: 1,)先插入把临时数据插入到TABLE_M(OID是自增的)中(Insert Into ….select …),我之后获取 select Scope_I

多线程下不反复读取SQL Server 表的数据

在进行一些如发送短信.邮件的业务时,我们常常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送.发送完毕后再将数据转移到历史表中,这样保证待发送表的数据普通情况下不会太多.如待发送表结构为: Create Table SMS(ID int not null identity(1,1),Content varchar(1024),Status int not null,CreateTime datetime); Status 取值:0未读取 1已读取 这样设计的优点

多线程下不重复读取SQL Server 表的数据

在进行一些如发送短信.邮件的业务时,我们经常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送,发送完成后再将数据转移到历史表中,这样保证待发送表的数据一般情况下不会太多.如待发送表结构为: Create Table SMS(ID int not null identity(1,1),Content varchar(1024),Status int not null,CreateTime datetime); Status 取值:0未读取 1已读取 这样设计的好处

java sql编辑器 动态报表 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫

获取[下载地址]   QQ: 313596790   [免费支持更新] 三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器(开发利器)+快速构建表单;            QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块 B 集成阿里巴巴数据库连接池druid;

SQL Server CPU

解决数据库系统的性能问题可能是一项艰巨的任务.了解如何找到问题很重要,但是了解系统对特定请求作出特定反应的原因更加重要.影响数据库服务器上的 CPU 利用率 的因素有很多:SQL 语句的编译和重新编译.缺少索引.多线程操作.磁盘瓶颈.内存瓶颈.日常维护以及抽取.转换和装载 (ETL) 活动和其他因素.利用 CPU 本身并不是一件坏事情,执行任务是 CPU 的职责所在.CPU 利用率正常的关键是确保 CPU 处理您需要它处理的任务,而不是将循环浪费在不良优化的代码或缓慢的硬件上. 达到同一目的的两

集群中多线程如何处理表中的数据的问题

1)场景: 网站向消息平台发送消息,消息平台将其保单到数据库中: 后台有多台服务器进行集群,这种情况下就会出现多线程同时获取到同一条消息进行处理的问题?如何解决: 2)具体方案,如下的sql即可解决. //定义一张qtz_locks表,用来做控制锁使用. //for update:代表给你查询出的记录添加锁 //nowait: 代表如果获取不到数据不等待直接抛出异常退出 select * from qrtz_locks_ex where lock_name='CALENDAR_ACCESS' a

springmvc+mybatis+sql server实现简单登录功能【转】

一.源码: 1.Users.java package com.login.entity;import java.io.Serializable;public class Users implements Serializable {  /**    *     */  private static final long serialVersionUID = 1L;  private Integer id;  private String username;  private String pas