Во 'внутреннем' пуле ресурсов существует недостаточная системная память

Звуки wonky. Использовал бы HTTPS и возможно пакет шифрования для обработки ключа.

я думаю, что CommonCrypto доступен для iPhone.

РЕДАКТИРОВАНИЕ: Все еще звуки wonky. Почему кто-либо передал бы секретный ключ в HTTP-заголовке? Любой, кто прослеживает Ваш сетевой трафик (через регистрирующийся маршрутизатор Wi-Fi, например) видел бы его.

существуют устойчивые методы защиты для шифрования трафика сообщений..., почему бы не использовать их, а не изобретают то, что в основном тривиально дефектная система?

РЕДАКТИРОВАНИЕ II: А-ч, я вижу. Я шел бы вперед и использовал бы Связку ключей... Я думаю, что это предназначается для просто этих видов случаев. Я пропустил это, Вы генерировали запрос с помощью ключа. Все еще использовал бы HTTPS, если я мог, хотя, начиная с того способа, которым Вы не рискуете людьми, выводящими Вашу keygeneration схему через контроль достаточного количества подписей.

14
задан 4 revs, 2 users 100% 11 October 2009 в 13:58
поделиться

4 ответа

Разве вам не нужно очищать временную таблицу #t после каждой итерации? т.е. добавить TRUNCATE TABLE #t в конце вашей процедуры? Я думаю, что временная таблица #t существует до завершения сеанса, а не до завершения хранимой процедуры. SELECT INTO просто добавляет к существующему #t , но не заменяет его.

Другое дело - использовать постоянную таблицу, а не то, что хранится в tempdb #tables .

8
ответ дан 1 December 2019 в 15:12
поделиться

Вы можете попробовать запускать вставку партиями, а не сразу весь набор данных.

0
ответ дан 1 December 2019 в 15:12
поделиться

Проблема заключается в использовании связанного сервера через поставщика SQL Anywhere 11.0.1 SAOLEDB.11 для вставки данных в целевой столбец, объявленный как больший, чем VARCHAR (8000). Вот упрощенный воспроизводимый пример:

-- Overview: SQL Server 2008 suffers from a fatal memory leak
--    if an attempt is made to use a linked server and the 
--    SAOLEDB.11 provicer to copy data from SQL Server
--    to a SQL Anywhere 11.0.1 table that contains a single column
--    larger than VARCHAR ( 8000 ); i.e, a VARCHAR ( 8000 ) target
--    column is OK but VARCHAR ( 8001 ) is not. The actual string 
--    length is not an issue, nor is the fact that the SQL Server
--    column is declared as TEXT. The memory leak is faster if
--    there is more than one target column larger than VARCHAR ( 8000 ).
--    The server computer freezes and must be rebooted.
-- Msg 701, Level 17, State 123, Server BRECK-PC\SQLEXPRESS, Line 2
-- There is insufficient system memory in resource pool 'internal' to run this
-- query.
-- Location:        qxcntxt.cpp:1052
-- Expression:      cref == 0
-- SPID:            52
-- Process ID:      2044

---------------------------------------------------------
-- SQL ANYWHERE 11 on target computer
---------------------------------------------------------

-- Target:
-- HP Pavilion laptop, 4GHz Pentium 4, 2G RAM
-- Windows XP SP2
-- SQL Anywhere 11.0.1.2276

---------------------------------------------------------
-- Windows commands used to create and start in-memory database

/*
"%SQLANY11%\bin32\dbinit.exe"^
  mem.db

"%SQLANY11%\bin32\dbspawn.exe" -f^
  "%SQLANY11%\bin32\dbsrv11.exe"^
  -im nw^
  -o dbsrv11_log.txt^
  mem.db 

"%SQLANY11%\bin32\dbisql.com"^
  -c "ENG=mem;DBN=mem;UID=dba;PWD=sql;CON=mem-1"
*/

---------------------------------------------------------
-- Create target table with one single "long" column.

BEGIN
   DROP TABLE sa_target;
   EXCEPTION WHEN OTHERS THEN
END;

CREATE TABLE sa_target (
   primary_key      INTEGER NOT NULL PRIMARY KEY,
   string_column_1  VARCHAR ( 8001 ) NOT NULL );

---------------------------------------------------------
--- SQL SERVER 2008 on source (server) computer
---------------------------------------------------------

-- Server:
-- Desktop with Intel Core 2 Quad Q9450 2.66Ghz 4G RAM
-- Windows Vista Ultimate 64 bit build 6001 SP1
-- SQL Server 2008 Express 64 Service Pack 1 with cumulative update package 4:
--    Microsoft SQL Server 2008 (SP1) - 10.0.2734.0 (X64)   Sep 11 2009 14:30:58   
--    Copyright (c) 1988-2008 Microsoft Corporation  Express Edition with    
--    Advanced Services (64-bit) on Windows NT 6.0 <X64>    
--    (Build 6001: Service Pack 1) 
-- SAOLEDB.11 driver from SQL Anywhere 11.0.1.2276

---------------------------------------------------------
-- Windows command used to start osql.exe

/*
"c:\Program Files\Microsoft SQL Server\100\Tools\Binn\osql.exe"^
  -d main^
  -I^
  -l 10^
  -P j68Fje9#fyu489^
  -S BRECK-PC\SQLEXPRESS^
  -U sa
*/

---------------------------------------------------------
-- Create database.

USE master
GO

BEGIN TRY
   DROP DATABASE main;
END TRY
BEGIN CATCH
END CATCH;
GO

CREATE DATABASE main
ON PRIMARY
( NAME = main_dat,
   FILENAME = 'E:\data\main\main.mdf',
   SIZE = 2GB,
   FILEGROWTH = 200MB )
LOG ON
( NAME = 'main_log',
   FILENAME = 'E:\data\main\main.ldf',
   SIZE = 2GB,
   FILEGROWTH = 200MB )
GO

----------------------------------------------------------------------------
-- Configure SAOLEDB.11 provider.

USE master
go 

-- SAOLEDB.11 provider dlls registered via these Windows commands:
--    regsvr32 dboledb11.dll
--    regsvr32 dboledba11.dll

EXEC master.dbo.sp_MSset_oledb_prop N'SAOLEDB.11', N'AllowInProcess', 1
GO

-- If the following statement produces this message, it probably means 
-- that 'DisallowAdHocAccess' is already set to zero for SAOLEDB.11:
--
-- RegDeleteValue() returned error 2, 'The system cannot find the file specified.'

EXEC master.dbo.sp_MSset_oledb_prop N'SAOLEDB.11', N'DisallowAdHocAccess', 0
GO

----------------------------------------------------------------------------
-- THIS SECTION WAS NOT RUN.
-- Set up for OPENROWSET usage.
-- NOT REQUIRED for required for Linked Server usage.

USE master
GO

sp_configure 'show advanced options', 1
GO

RECONFIGURE
GO

sp_configure 'Ad Hoc Distributed Queries', 1
GO

RECONFIGURE
GO

----------------------------------------------------------------------------
-- Set up Linked Server usage.

USE main
GO

BEGIN TRY
   EXEC sp_droplinkedsrvlogin 
      @rmtsrvname = 'mem',
      @locallogin = NULL  
END TRY
BEGIN CATCH
END CATCH 
GO

BEGIN TRY
   EXEC sp_dropserver
      @server = 'mem'
END TRY
BEGIN CATCH
END CATCH 
GO

EXEC sp_addlinkedserver
   @server = 'mem',
   @srvproduct = 'SQL Anywhere OLE DB Provider',
   @provider = 'SAOLEDB.11',
   @datasrc = 'mem_PAVILION2' 
GO

EXEC master.dbo.sp_serveroption 
   @server=N'mem', 
   @optname=N'rpc', 
   @optvalue=N'true' 
GO

EXEC master.dbo.sp_serveroption 
   @server=N'mem', 
   @optname=N'rpc out', 
   @optvalue=N'true' 
GO

EXEC sp_addlinkedsrvlogin 
   @rmtsrvname = 'mem', 
   @useself = 'false', 
   @locallogin = NULL, 
   @rmtuser = 'dba', 
   @rmtpassword = 'sql' 
GO

----------------------------------------------------------------------------
-- Create and fill source table with 1 million rows.

USE main
GO

BEGIN TRY
   DROP TABLE mss_source; 
END TRY
BEGIN CATCH
END CATCH 
GO

CREATE TABLE mss_source ( 
   primary_key      INTEGER NOT NULL PRIMARY KEY,
   string_column_1  TEXT NOT NULL )
GO

BEGIN
   DECLARE @primary_key INTEGER 
   SELECT @primary_key = 1
   BEGIN TRANSACTION
   WHILE @primary_key <= 1000000 
   BEGIN
      INSERT mss_source VALUES (
         @primary_key,
         REPLICATE ( 'Some test data. ', 2 ) )
      SELECT @primary_key = @primary_key + 1
   END
   COMMIT
END
GO

SELECT COUNT(*) FROM mss_source
GO

-- 1000000

---------------------------------------------------------
-- Copy data to target table.

SELECT CURRENT_TIMESTAMP
GO

INSERT INTO mem..dba.sa_target 
SELECT * 
  FROM mss_source
GO

SELECT CURRENT_TIMESTAMP
GO

---------------------------------------------------------
-- Test 1 - Code as shown above.
-- FAILED
-- 
-- Started at 2009-10-12 10:06:33.393
-- 
-- A slow server memory leak began immediately.
-- The initial target insert rate was about 2000 rows per second.
-- Server RAM usage reached 3.82 GB, Physical Memory: 95%, Page File 16236M / 16288M
-- The server display became frozen.
-- The server became unresponsive to mouse input.
-- The target insert rate dropped below 1000 rows per second, but inserts continued.
-- The copy process reached 937,817 rows inserted on the target.
-- This dialog box appeared on the server: "Your computer is low on memory"
-- Eventually, the process failed, and this message appeared in the osql.exe window:
-- 
-- Msg 701, Level 17, State 123, Server BRECK-PC\SQLEXPRESS, Line 2
-- There is insufficient system memory in resource pool 'internal' to run this
-- query.
-- Location:        qxcntxt.cpp:1052
-- Expression:      cref == 0
-- SPID:            52
-- Process ID:      2044
-- 
-- Failed at 2009-10-12 10:22:21.817
-- The server disk I/O light remained lit without interruption.
-- The server required a hard reboot.

---------------------------------------------------------
-- Test 2 - Code as shown above, except for VARCHAR ( 8000 ).
-- SUCCESSFUL 

BEGIN
   DROP TABLE sa_target;
   EXCEPTION WHEN OTHERS THEN
END;

CREATE TABLE sa_target (
   primary_key      INTEGER NOT NULL PRIMARY KEY,
   string_column_1  VARCHAR ( 8000 ) NOT NULL );

-- Started at 2009-10-12 10:41:46.427
-- There was some slight initial growth in RAM usage on the server.
-- Server RAM usage stabilized at 1.40 GB, Physical Memory: 35%, Page File 1560M / 8352M
-- The target insert rate remained about 2000 rows per second throughout.
-- Finished OK at 2009-10-12 10:50:52.240

---------------------------------------------------------
-- Test 3 - Repeat Test 2
-- SUCCESSFUL 

-- Started at 2009-10-12 10:53:38.350
-- No further RAM usage growth on the server.
-- Finished OK at 2009-10-12 11:02:10.457
2
ответ дан 1 December 2019 в 15:12
поделиться

Instead of using Temp Tables, can you try using Variable tables?

eg.

DECLARE @ResultTable TABLE (TableId INT PRIMARY KEY, ... etc)

INSERT INTO @ResultTable
SELECT TableId, ....
FROM mss_t2 

... etc. ...
0
ответ дан 1 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: