style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Inserción Masiva utilizando GORM grails

Hola, me gustaría que me pudieran ayudar con el siguiente problema, resulta que necesito almacenar más de 100000 registros, sé que al utilizar gorm es lo menos eficiente que puedes hacer, sin embargo leyendo en algunos blogs, muchos disminuian considerablemente el tiempo para el almacenamiento después de liberar la colección que almacena la sesión de grails, sin embargo he notado que la primera vez que lo ejecuto todo va bien, pero cuando intento hacerlo por segunda vez, se alenta demasiado, que puedo estar haciendo mal?, dejo aquí el código que estoy utilizando y gracias.

En mi controlador tengo lo siguiente:

   @Transactional
    def asignacionMasivaPorAnio() {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
            def vigente = configuracionService.findByProceso("0001");
            Integer anio = vigente ? Integer.parseInt(vigente?.ejercicio) : Integer.parseInt(sdf.format(new Date()))
            //Obtenemos el mapa a asignar
            int saved = sucursalBeneficioService.countByAnio(anio)
           
            if (saved > 0)
                throw new Exception(" Ya existen asignaciones correspondientes al ejercicio actual")
           
            List mapToSave = sucursalBeneficioService.getMapToSave(anio - 1)   //---devuelve una lista como esta [[1,2],[3,4],[5,6]..........[n,n]]
            def beneficios = catBeneficioService.findAllByActive(true)
            def sucursales = sucursalService.getAll()

            def startTime = System.currentTimeMillis()
            sucursalService.importBeneficioInSucursal(mapToSave, anio, beneficios, sucursales)
            println "time: " + (startTime - System.currentTimeMillis())/1000 + "seconds"
            def data = [message: "Asignación Masiva Agregada Correctamente! ", type: "Satisfactorio", success: true]
            render data as JSON
        } catch (Exception ex) {
            def data = [message: "Surgió un error durante la asignación masiva " + ex.getMessage(), type: "Error", success: false]
            render data as JSON
        }
    }

En mi Service tengo lo siguiente

    def sessionFactory
    def propertyInstanceMap = DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP

/**
     * Asignacion masiva.....
     * @param mapToSave
     */

    def importBeneficioInSucursalBeneficio(List mapToSave, anio, def beneficios, def sucursales){
        Date fecha = new Date();
        int index = 0;
        SucursalBeneficio.withTransaction { status ->
            try{
                mapToSave.each { item ->
                    CatBeneficio beneficio = beneficios.find { b -> b.id == item[0] }
                    Sucursal sucursal = centros.find { c -> c.id == item[1] }
                    def existingcb = SucursalBeneficio.findByBeneficioAndSucursalAndAnio(beneficio, sucursal, anio)
                    if (!existingcb) {
                        new SucursalBeneficio(beneficio: beneficio, sucursal: sucursal, anio: anio, active: true, dateCreated: fecha).save()
                    }
                    if (index % 1000 == 0) cleanUpGORM()
                    index++;
                }
                return mapToSave.size()
            }catch (Exception ex){
                status.setRollbackOnly()
                cleanUpGORM()
                return null
            }
        }
    }

    protected def cleanUpGORM() {
        def session = sessionFactory.currentSession

        if( !session )
            log.warn "No hibernate session could be retrieved"
       
        session?.flush()
        session?.clear()
        propertyInstanceMap.get().clear()
    }

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">