http://www.sqlite.org/speed.html
자세한건 링크 고고싱
'develop > DB' 카테고리의 다른 글
MariaDB 오류 (Index for table '.\mysql\db.MYI' is corrupt; try to repair it) (0) | 2024.05.17 |
---|---|
Mysql, GMT +0 기준 시간 (0) | 2019.03.05 |
cassandra db 정리 (0) | 2013.05.09 |
http://www.sqlite.org/speed.html
자세한건 링크 고고싱
MariaDB 오류 (Index for table '.\mysql\db.MYI' is corrupt; try to repair it) (0) | 2024.05.17 |
---|---|
Mysql, GMT +0 기준 시간 (0) | 2019.03.05 |
cassandra db 정리 (0) | 2013.05.09 |
* spin_lock_irqsave()와 spin_lock_irq()
둘다 interrupt를 disable 시킨 이후에 spin lock을 획득하는 것은 동일하지만,
spin_lock_irqsave()는 CPU의 flag 레지스터를 보관했다가
spin_unlock_irqrestore()로 복구할 수 있다.
* spin_lock()과 spin_lock_irq()의 차이는
spin_lock()은 interrupt를 disable하지 않기 때문에
interrupt handler(top half)에서는 사용할 수 없다.
대신 이때는 spin_lock_irq()나 spin_lock_irqsave()를 사용해야 한다.
* spin_lock_bh()
같은 종류의 softirq는 여려 CPU에서 동시에 실행될 수 있기 때문에
([ksoftirqd/CPUn] 커널 쓰레드가 softirq의 실행을 담당한다.)
softirq를 disable한 이후에 spin lock을 획득한다.
원래 이 함수의 이름은 spin_lock_softirq() 정도가 되어야 맞겠지만
예전 커널의 흔적이 아직 남아있다.
* 그리고, spin_lock()은
spin lock으로 보호해야 할 데이터가
interrupt handler(top half)에서도, softirq handler에서도 접근하지 않고
단지 그 외의 일반적인 커널 코드에서만 접근한다면
interrupt disable, softirq disable 같은 overhead 없이 spin lock을 얻을때 사용한다.
http://kldp.org/node/54671 답글에서 발췌
PostgreSQL replication, Slony 사용 (1) 초기 설정 (0) | 2012.08.17 |
---|---|
sqlite 동시 접근시 에러?? (0) | 2012.08.11 |
mysql_ping 15분 hang 해결방안 (0) | 2012.06.28 |
ssh 접속시 증명서 변경됐다고 나올 때 (0) | 2012.05.31 |
ubuntu 기본 설정 (0) | 2012.05.30 |
처음 테스트 할 때에는 분명 windows건 linux건 mysql서버가 다운되면 mysql_ping과 insert query가 약 15초 정도 멈춘 후 프로세스가 다시 정상적으로 진행됐었는데...
오늘 linux에서 타이머를 테스트 하려고 하니 15분간 멈춰 있었다...;;
덕분에 하루종일 인터넷을 검색했다.
키워드로 검색되는 거의 모든 페이지를 본 듯하다.. 하지만 해결을 하지 못했다.
windows에서는 간단히
mysql_option(..., MYSQL_OPT_READ_TIMEOUT, ...);
mysql_option(..., MYSQL_OPT_WRITE_TIMEOUT, ...);
두개만 설정하면 된다.
하지만 linux에서는 저 방법도 안되고.. 꼼수로 CONNECT_TIMEOUT을 설정한 후 쿼리 전에 항상 재접속을 하는 방법을 해봤는데.. 뭐.. 역시나 안된다..(아마 insert query를 하면서 멈추지 않았을까 생각된다... 아니면 조건을 잘 못 했다거나 ;;)
된다고 해도 이 방법을 쓰면 안되겠지만;;
결국 mysql 소스를 이리저리 까뒤집어서 socket에 option을 설정하는 것으로 해결했다.
소켓이 생성되는 시기는 connect류의 함수가 호출되는 시기이므로 connect함수가 호출 된 후 설정하였다.
struct timeval tv;
tv.tv_sec = 1;
setsockopt(obj->net.fd, SOL_SOCKET, SO_SNDTIMEO,(struct timeval *)&tv,sizeof(struct timeval));
setsockopt(obj->net.fd, SOL_SOCKET, SO_RCVTIMEO,(struct timeval *)&tv,sizeof(struct timeval));
대충 10여회 테스트 한 결과 아무리 오래 걸려도 1분은 걸리지 않았는데.. 이번엔 처음보는 에러가 나온다. 에러번호는 2013인데 에러 내용이 달라졌다..
2013, Lost connection to MySQL server at 'reading initial communication packet', system error: 111
음 -_-;;
일단 예상은... timeout 시간을 설정함으로써 DB와 연결이 되지 않으니 접속 권한이 없는것으로 판단되어 나타나는 에러 같은데...
약 10여회 테스트 결과는 정상 동작했다.
sqlite 동시 접근시 에러?? (0) | 2012.08.11 |
---|---|
spin_lock, spin_lock_irq, spin_lock_bh (0) | 2012.06.28 |
ssh 접속시 증명서 변경됐다고 나올 때 (0) | 2012.05.31 |
ubuntu 기본 설정 (0) | 2012.05.30 |
segment fault 지점 찾기 (0) | 2012.04.06 |
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
ssh root@[IP]
이렇게 쳤을뿐인데...
ssh-keygen -R [ IP or DomainName] ex) ssh-keygen -R 123.123.123.123 |
sqlite 동시 접근시 에러?? (0) | 2012.08.11 |
---|---|
spin_lock, spin_lock_irq, spin_lock_bh (0) | 2012.06.28 |
mysql_ping 15분 hang 해결방안 (0) | 2012.06.28 |
ubuntu 기본 설정 (0) | 2012.05.30 |
segment fault 지점 찾기 (0) | 2012.04.06 |
.bashrc (혹은 쉘 종류별 파일)
alias ll='ls -al'
alias grep='grep --color=auto'
.vimrc
set ts=4
set number
부트로그 활성화
# vi /etc/default/bootlogd
BOOTLOGD_ENABLE=Yes
sqlite 동시 접근시 에러?? (0) | 2012.08.11 |
---|---|
spin_lock, spin_lock_irq, spin_lock_bh (0) | 2012.06.28 |
mysql_ping 15분 hang 해결방안 (0) | 2012.06.28 |
ssh 접속시 증명서 변경됐다고 나올 때 (0) | 2012.05.31 |
segment fault 지점 찾기 (0) | 2012.04.06 |
예제를 위하여 간단한 코드를 작성하였다.
배열 data[[]는 65535개의 int 형이다.
segment fault 발생을 위해 배열 범위를 넘겨 데이타를 쓰려고 시도해 본다.
core dump 파일 생성을 위하여
ulimit -c unlimited 를 수행해 준다
소스코드 컴파일시 -g 옵션을 붙여 심볼이 생성되도록 한다.
segment fault로 인하여 core dump 파일이 생긴것을 확인하고
gdb를 이용하여 segment fault 지점을 확인한다.
[출처] segment fault 지점 찾기|작성자 무난한놈
퍼옴 : http://blog.naver.com/gooddev/110008383660
sqlite 동시 접근시 에러?? (0) | 2012.08.11 |
---|---|
spin_lock, spin_lock_irq, spin_lock_bh (0) | 2012.06.28 |
mysql_ping 15분 hang 해결방안 (0) | 2012.06.28 |
ssh 접속시 증명서 변경됐다고 나올 때 (0) | 2012.05.31 |
ubuntu 기본 설정 (0) | 2012.05.30 |
C# 클래스 라이브러리 동적 로딩을 위한 추가 내용 (0) | 2010.09.29 |
---|---|
C#에서 클래스 라이브러리 동적 로딩 (0) | 2010.09.29 |
C# ActiveX 만들기 (0) | 2010.09.29 |
ActiveX 에서 다른 ActiveX를 생성할 때 주의점 (0) | 2010.07.29 |
IObjectSafety (1) | 2010.02.03 |
클래스 라이브러리를 웹에서 다운 받은 후 동적로딩하면 더 좋지 않을까? 란 생각에 다운로드받는 부분도 찾아봤다..
private void Download(string strModule)
{
try {
WebRequest ttt = WebRequest.Create("http://indra17.mireene.com/Test/" + strModule + ".dll");
WebResponse mmm = ttt.GetResponse();
Stream kkk = mmm.GetResponseStream();
int BUFFER = 1024;
BinaryWriter bw = null;
BinaryReader br = new BinaryReader(kkk);
try
{
Byte[] data = new byte[BUFFER];
FileStream fs = new FileStream(System.IO.Path.Combine(m_strSavePath, strModule + ".dll"), FileMode.Create);
long total = 0;
int recv_size = 0;
long prg_value = 0;
long time = 0;
try
{
bw = new BinaryWriter(fs);
while (true)
{
recv_size = br.Read(data, 0, BUFFER);
if (recv_size <= 0) break;
bw.Write(data, 0, recv_size);
total += recv_size;
}
Console.WriteLine("Download Size = {0}", total);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
if (bw != null) bw.Close();
if (br != null) br.Close();
}
fs.Close();
kkk.Close();
mmm.Close();
} catch (ArgumentNullException ane) {
Console.WriteLine("ArgumentNullException : {0}",ane.ToString());
} catch (SocketException se) {
Console.WriteLine("SocketException : {0}",se.ToString());
} catch (Exception e) {
Console.WriteLine("Unexpected exception : {0}", e.ToString());
}
} catch (Exception e) {
Console.WriteLine( e.ToString());
}
}
MHTML 저장 유의사항 (0) | 2011.03.09 |
---|---|
C#에서 클래스 라이브러리 동적 로딩 (0) | 2010.09.29 |
C# ActiveX 만들기 (0) | 2010.09.29 |
ActiveX 에서 다른 ActiveX를 생성할 때 주의점 (0) | 2010.07.29 |
IObjectSafety (1) | 2010.02.03 |
// 클래스 라이브러리 로딩
Assembly assem = Assembly.LoadFile(System.IO.Path.Combine(m_strSavePath, strModule + ".dll"));
//타입 얻기
string strType = strModule.Substring(0, strModule.IndexOf("Library"));
//Type targetType = assem.GetType(strModule + "." + strType);
Type targetType = assem.GetType(strModule + "." + strType);
//객체 생성 - 디폴트 생성자 호출
Object obj = assem.CreateInstance(targetType.FullName);
//멤버에 값 설정 - 마지막 인수 5가 멤버에 값을 설정하는 부분 입니다.
//바인딩 플래그의 마지막이 셋필드임을 확인하실 수 있을 겁니다.
try
{
strRes = (string)targetType.InvokeMember(strMethod,
BindingFlags.InvokeMethod | BindingFlags.Instance |
BindingFlags.Public | BindingFlags.Static, null, obj, new string[] { strParam });
}
catch(Exception e) {
Console.WriteLine(e.ToString());
}
참고.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=82904&ref=82872
MSDN 검색
reflection, Dynamically Loading and Using Types
MHTML 저장 유의사항 (0) | 2011.03.09 |
---|---|
C# 클래스 라이브러리 동적 로딩을 위한 추가 내용 (0) | 2010.09.29 |
C# ActiveX 만들기 (0) | 2010.09.29 |
ActiveX 에서 다른 ActiveX를 생성할 때 주의점 (0) | 2010.07.29 |
IObjectSafety (1) | 2010.02.03 |
http://mixy.egloos.com/953406
/// <summary>
/// See Internet SDK, IObjectSafety.
/// </summary>
[Flags]
public enum ObjectSafetyFlags : int
{
/// <summary>
/// Caller of interface may be untrusted
/// </summary>
INTERFACESAFE_FOR_UNTRUSTED_CALLER = 1,
/// <summary>
/// Data passed into interface may be untrusted
/// </summary>
INTERFACESAFE_FOR_UNTRUSTED_DATA = 2,
/// <summary>
/// Object knows to use IDispatchEx.
/// </summary>
INTERFACE_USES_DISPEX = 4,
/// <summary>
/// Objects knows to use IInternetHostSecurityManager.
/// </summary>
INTERFACE_USES_SECURITY_MANAGER = 8,
/// <summary>
/// Flags combination.
/// </summary>
SafeForScripting = INTERFACESAFE_FOR_UNTRUSTED_CALLER |
INTERFACESAFE_FOR_UNTRUSTED_DATA
}
[ComImport]
[Guid("CB5BDC81-93C1-11cf-8F20-00805F3CD064")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
void GetInterfaceSafetyOptions(ref Guid riid, out int supportedOptions, out int enabledOptions);
void SetInterfaceSafetyOptions(ref Guid riid, int optionSetMask, int enabledOptions);
}
[Guid("5E603C7D-4B7C-412a-BAB4-064E5674F97A")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IActiveXControl_Method
{
[DispId(1)]
string dispFunction(string str);
}
[ProgId("TestServer.ActiveX")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("D2BD9E76-C60B-4724-B44E-986132D8FA7A")]
public partial class Server : UserControl, IActiveXControl_Method, IObjectSafety
{
#region For Registration
[ComRegisterFunction()]
public static void RegisterClass(string key)
{
//Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it
StringBuilder sb = new StringBuilder(key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
//Open the CLSID\{guid} key for write access
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
//And create the 'Control' key - this allows it to show up in
//the ActiveX control container
RegistryKey ctrl = k.CreateSubKey("Control");
ctrl.Close();
//Next create the CodeBase entry - needed if not string named and GACced.
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
inprocServer32.Close();
//Finally close the main key
k.Close();
}
[ComUnregisterFunction()]
public static void UnregisterClass(string Key)
{
StringBuilder sb = new StringBuilder(Key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
//Open HKCR\CLSID\{guid} for write access
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
//Delete the 'Control' key, but don't throw an exception if it does not exist
k.DeleteSubKey("Control", false);
//Next open InprocServer32
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
//And delete the CodeBase key, again not throwing if missing
k.DeleteSubKey("CodeBase", false);
//Finally close the main key
k.Close();
}
#endregion
#region IObjectSafety 멤버
public void GetInterfaceSafetyOptions(ref Guid riid, out int supportedOptions, out int enabledOptions)
{
supportedOptions = enabledOptions = (int)ObjectSafetyFlags.SafeForScripting;
}
public void SetInterfaceSafetyOptions(ref Guid riid, int optionSetMask, int enabledOptions)
{
}
#endregion
string m_strSavePath = System.Environment.GetFolderPath(Environment.SpecialFolder.Templates);
public Server()
{
InitializeComponent();
}
#region IActiveX_Method
public string dispFunction(string str)
{
string strRes;
return strRes;
}
#endregion
}
C# 클래스 라이브러리 동적 로딩을 위한 추가 내용 (0) | 2010.09.29 |
---|---|
C#에서 클래스 라이브러리 동적 로딩 (0) | 2010.09.29 |
ActiveX 에서 다른 ActiveX를 생성할 때 주의점 (0) | 2010.07.29 |
IObjectSafety (1) | 2010.02.03 |
BOOST 컴파일 옵션 (0) | 2010.02.03 |